這道題的意識是給你n個機器和m個任務, 每個任務有兩個值花費時間x和難度y, 每個機器也有兩個值最大工作時間x1和最大工作難度y1, 機器可以勝任某個工作的條件是x1>=x && y1>=y,機器勝任乙個工作可以拿到x*500+2*y的錢,現在問你怎麼匹配才能使匹配數最大且錢數最多。 由於資料量過大我們考慮使用貪心來解決這道題, 由於x的權重遠大於y的權重,因此我們將工作按照x降序排列, x相同的時候按照y降序排列, 這樣就可以保證錢數最多,對於乙個工作我們可以選擇的是所有x1>x的機器, 而在這些機器中我們選擇最小的y1, 為什麼這樣選呢, 因為這樣選就可以保留比較大的y1使其去匹配後面的任務, 而x1則完全不用操心, 他肯定可以匹配後面的任務, 因為任務是按照x降序排列的, **如下:
#include usingnamespace
std;
struct
node
}mach[
100000+100], task[100000+100
];int n, m; //
machine task
int s[150
];int
main()
; }
for(int i=0; i);}
sort(mach, mach+n);
sort(task, task+m);
int num = 0; //
匹配的數量
long
long money = 0
; memset(s,
0, sizeof
(s));
int j = 0
;
for(int i=0; i)
for(int k=task[i].y; k<=100; k++) if(s[k]>0
)
}printf(
"%d %lld\n
", num, money);
}return0;
}
hdu 4864 任務分配貪心
有n臺機器,m個任務,每台機器有xi時間,yi等級,每個任務也有xj,yj,當乙個任務可以被處理的條件是,xj xi 且 yj 對於每個任務,時間大的優先去匹配,時間相同的,等級大的優先去匹配,因為時間佔得多,時間多1就多500,而等級最多才差200。然後匹配的時候,盡量使用等級小的去匹配,而時間只...
hdu 4864 Task 貪心 技巧
題目鏈結 一道很有技巧的貪心題目。題意 有n個機器,m個任務。每個機器至多能完成乙個任務。對於每個機器,有乙個最大執行時間xi和等級yi,對於每個任務,也有乙個執行時間xj和等級yj。只有當xi xj且yi yj的時候,機器i才能完成任務j,並獲得 500 xj 2 yj金錢。問最多能完成幾個任務,...
hdu4415 貪心好題
刺客殺人使用自己的刀需要消耗一定的耐久度,或者用殺人得到的刀,問用盡可能少的代價殺盡可能多的人 首先,如果殺了乙個有刀的人,最優解中有刀的人全部被殺完 證明 假設最優解中殺了x,不殺y,那麼殺了x後再殺y並不會使得自己的刀的數量有所減少,這種情況還多殺了乙個人,則這個不是最優解,矛盾了 將結果分為兩...