1 条题解
-
0
贪心,按费用排序从低到高排序,优先送费用低的,费用低的又去传递更低的。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+10; ll n,p; struct node{ int a,b; int jia; }d[N]; bool cmp(node x,node y) { if(x.b==y.b)return x.a>y.a; return x.b<y.b; } ll solve() { sort(d+1,d+n+1,cmp); ll ans=0,id=0; for(int i=1;i<=n;i++) if(d[i].jia==0) { ans+=p; if(id==0)id=i+1; if(d[i].b<p) for(int j=1;j<=d[i].a && id<=n ;j++) d[id++].jia=d[i].b; } else { ans+=d[i].jia; if(id==0)id=i+1; if(d[i].b<p) for(int j=1;j<=d[i].a && id<=n ;j++) d[id++].jia=d[i].b; } for(int i=1;i<=n;i++)d[i].jia=0; return ans; } int main() { ios::sync_with_stdio(0);cin.tie(0); int t; cin>>t; while(t--) { cin>>n>>p; for(int i=1;i<=n;i++)cin>>d[i].a; for(int i=1;i<=n;i++)cin>>d[i].b; cout<<solve()<<"\n"; } return 0; }
- 1
信息
- ID
- 8737
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 8
- 已通过
- 1
- 上传者