題目鏈結
一道很有技巧的貪心題目。
題意:有n個機器,m個任務。每個機器至多能完成乙個任務。對於每個機器,有乙個最大執行時間xi和等級yi,
對於每個任務,也有乙個執行時間xj和等級yj。只有當xi>=xj且yi>=yj的時候,機器i才能完成任務j,並獲得
500*xj+2*yj金錢。問最多能完成幾個任務,當出現多種情況時,輸出獲得金錢最多的情況。
分析:機器和任務都按照先拍x從大到小,再拍y從大到小的順序。然後遍歷任務,注意f陣列的作用,f陣列標
記大於當前任務時間的機器的等級個數, 由於任務都是從大到小排序了,所以接下來時間已經不是影響了,因為
已經遍歷過的機器的時間都是大於 將要遍歷的機器的時間的。所以只需要從 這些符合時間條件的機器裡選擇乙個
等級最小的,以免因為等級影響後面的遍歷。 為什麼要按照先x排序呢,因為500 > 2*100; 為什麼按照y從大到
小,因為x相等的情況下,y越大,計算的值越大。
最後注意hdu的int64;
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8#define ll long long
9using
namespace
std;
10const
int maxn = 100000+10;11
int n, m, f[110
];12
struct
node
13 ma[maxn], ta[maxn];
1617
bool
cmp(node a, node b)
1823
intmain()
2447
for(k = ta[i].y; k <= 100; k++)
4856}57
}58 printf("
%d %i64d\n
", cnt, ans);59}
60return0;
61 }
hdu 4864 Task 貪心 二分 set
題意 有n臺機器,m個任務,每台機器有xi,yi,每個任務也有xj,yj,當乙個任務可以被處理的條件是,xj xi 且 yj 貪心的話,如果是遍歷任務的話,那麼我們希望盡可能做時間和level更高的任務,我們可以先按時間排,時間相同按level,遞增排,機器也是按這個排。然後從最大價值的任務開始遍歷...
HDU 4864 Task(2014多校 貪心)
task 比賽當時思路想的差不多,感覺能過的,該處理的也都處理到了,最後還是沒過,可能是二分寫錯了吧 大意 給你n個機器,m個要完成的任務,每個機器跟任務都有兩個屬性,機器是最大工作時間跟等級,任務是需要工作的時間跟等級。完成乙個任務可以得到500 工作時間 2 等級 的報酬。完成任務的條件是機器的...
杭電ACM 4864,Task(貪心)
題意 有n個機器和m個任務,每個機器每天都有乙個最大工作時長x1,以及最大工作難度y1,每個任務都有乙個工作時間x2,工作難度y2。每完成乙個任務多有乙個收益500 x2 2 y2。假設每個機器一天只能完成乙個任務,乙個任務只能又乙個機器完成,不可由多個一起完成。求一天當中能完成的最多工,並輸出收益...