日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4864 Task(2014多校--贪心)

發布時間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 4864 Task(2014多校--贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Task

?

比賽當時思路想的差不多,感覺能過的,該處理的也都處理到了,最后還是沒過,可能是二分寫錯了吧-。-

大意:給你n個機器,m個要完成的任務,每個機器跟任務都有兩個屬性,機器是最大工作時間跟等級,任務是需要工作的時間跟等級。完成一個任務可以得到500*(工作時間)+2*(等級)的報酬。完成任務的條件是機器的工作時間滿足任務的需要,等級要大于等于任務的等級,一個機器只能用一次,一個任務也只能用一個機器去完成。需要進行策略選擇,使得完成更多的任務。

思路:開始想的就是貪心,也想到了貪心的時候時間是主導因素,要優先考慮,賽后寫的時候是看的標程用的map來實現的。

?

1 struct node 2 { 3 int time, lev; 4 } a[100010], b[100010]; 5 6 int cmp(node a, node b) 7 { 8 if(a.time == b.time) 9 return a.lev > b.lev; 10 return a.time > b.time; 11 } 12 13 map<int, int> M; 14 int n, m; 15 16 int main() 17 { 18 while(~scanf("%d%d", &n, &m)) 19 { 20 for(int i = 0; i < n; ++i) 21 { 22 scanf("%d%d", &a[i].time, &a[i].lev); 23 } 24 for(int i = 0; i < m; ++i) 25 { 26 scanf("%d%d", &b[i].time, &b[i].lev); 27 } 28 sort(a, a+n, cmp); 29 sort(b, b+m, cmp); 30 M.clear(); 31 int j = 0; 32 int ans1 = 0; 33 long long ans2 = 0; 34 for(int i = 0; i < m; ++i) 35 { 36 while(j < n && a[j].time >= b[i].time) 37 { 38 M[a[j].lev]++; 39 ++j; 40 } 41 map<int, int>::iterator it = M.lower_bound(b[i].lev); 42 if(it != M.end()) 43 { 44 ans1++; 45 ans2 += 500*b[i].time+2*b[i].lev; 46 int t = it->first; 47 M[t]--; 48 if(M[t] == 0) 49 { 50 M.erase(t); 51 } 52 } 53 } 54 printf("%d %I64d\n", ans1, ans2); 55 } 56 57 return 0; 58 } HDU 4864

轉載于:https://www.cnblogs.com/Silence-AC/p/3863944.html

總結

以上是生活随笔為你收集整理的HDU 4864 Task(2014多校--贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。