刺客殺人使用自己的刀需要消耗一定的耐久度,或者用殺人得到的刀,問用盡可能少的代價殺盡可能多的人
首先,如果殺了乙個有刀的人,最優解中有刀的人全部被殺完
證明:假設最優解中殺了x,不殺y,那麼殺了x後再殺y並不會使得自己的刀的數量有所減少,這種情況還多殺了乙個人,則這個不是最優解,矛盾了
將結果分為兩種,一是只殺沒有刀的人,排序從小到大殺即可
二是殺了有刀的人,根據上面的結論,有刀的人一定全部被殺,貪心的話第乙個一定殺代價最小的那個人,然後除去他之外的所有點按代價從小到大去用自己的刀殺,(為了將收集來的刀盡可能的用來殺代價大的人)
#include#include#include#include#include#include#include#include#includeusing namespace std;
#define rep(i,n) for(int i=0;ipii;
#define mp make_pair
#define cost first
#define nf second
pii a[n];
int b[n];
int ta,tb;
int cas=1;
bool cmp(const pii&a,const pii&b)
void kill_has(int&ans,int&left)
if(j==tb|| (i=b[j])){
if(left
hdu4415 不錯的想法題
題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...
hdu4415 不錯的想法題
題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...
HDU4864 貪心好題
這道題的意識是給你n個機器和m個任務,每個任務有兩個值花費時間x和難度y,每個機器也有兩個值最大工作時間x1和最大工作難度y1,機器可以勝任某個工作的條件是x1 x y1 y,機器勝任乙個工作可以拿到x 500 2 y的錢,現在問你怎麼匹配才能使匹配數最大且錢數最多。由於資料量過大我們考慮使用貪心來...