http://acm.hdu.edu.cn/showproblem.php?pid=6000
题意:有L件衣服,n个洗衣机,m个烘干机
然后求最少的把所以衣服洗完烘干的时间
思路:先用优先队列把所有洗完衣服的时间求出
然后,最先洗完的衣服放时间最多的洗衣机,这样可以使最后一件衣服尽早洗
1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #include <vector> 5 using namespace std; 6 struct Node{ 7 long long x,y; 8 bool operator < (const Node& rhs) const { 9 return y > rhs.y; 10 } 11 }; 12 priority_queue<Node >s; 13 priority_queue<Node>p; 14 long long a[1000005]; 15 16 17 int main() 18 { 19 // freopen("in.txt","r",stdin); 20 int t; 21 int l,n,m; 22 long long ans; 23 int cnt = 1; 24 scanf("%d",&t); 25 while(t--) 26 { 27 Node tmp; 28 ans = 0; 29 scanf("%d%d%d",&l,&n,&m); 30 while(!s.empty()) 31 s.pop(); 32 while(!p.empty()) 33 p.pop(); 34 for(int i = 0;i<n;i++) 35 { 36 scanf("%lld",&tmp.x); 37 tmp.y = tmp.x; 38 s.push(tmp); 39 } 40 for(int i= 0;i<m;i++) 41 { 42 scanf("%lld",&tmp.x); 43 tmp.y = tmp.x; 44 p.push(tmp); 45 } 46 for(int i = 0;i<l;i++) 47 { 48 tmp = s.top(); 49 a[i] = tmp.y; 50 tmp.y +=tmp.x; 51 s.push(tmp); 52 s.pop(); 53 } 54 for(int i = l-1;i>=0;i--) 55 { 56 tmp = p.top(); 57 ans = max(ans,tmp.y+a[i]); 58 tmp.y+=tmp.x; 59 p.push(tmp); 60 p.pop(); 61 } 62 printf("Case #%d: %lld ",cnt++,ans); 63 } 64 return 0; 65 }