1 条题解

  • 0
    @ 2024-4-2 18:00:29

    贪心,按费用排序从低到高排序,优先送费用低的,费用低的又去传递更低的。

    #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
    上传者