[hdu6000]Wash

扫码查看

直接从小往大枚举,贪心用结束时间最早的洗衣机和烘干机去洗,然后可以得到每一件衣服洗完的时间和烘干的时间
然后由于顺序任意,配对肯定是逆序,即最早的洗完时间配最晚的烘干时间,相加取max即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 priority_queue<pair<ll,int> >q;
 5 pair<ll,int>o;
 6 int t,k,n,m,x;
 7 ll ans,d[2][1000005];
 8 int main(){
 9     scanf("%d",&t);
10     for(int ii=1;ii<=t;ii++){
11         scanf("%d%d%d",&k,&n,&m);
12         ans=0;
13         for(int i=0;i<2;i++){
14             while (!q.empty())q.pop();
15             for(int j=1;j<=n;j++){
16                 scanf("%d",&x);
17                 q.push(make_pair(-x,x));
18             }
19             for(int j=1;j<=k;j++){
20                 o=q.top();
21                 q.pop();
22                 d[i][j]=-o.first;
23                 o.first-=o.second;
24                 q.push(o);
25             }
26             swap(n,m);
27         }
28         for(int i=1;i<=k;i++)ans=max(ans,d[0][i]+d[1][k-i+1]);
29         printf("Case #%d: %lld\n",ii,ans);
30     }
31 }
View Code
01-26 12:43
查看更多