有n只兔子,每只有乙個血量b[i],需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d[i],**為p[i](1 <= i <= m)。假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子最少需要多少q幣。如不能殺死所有兔子,請輸出no solution。
特別說明:1、當箭的傷害值大於等於兔子的血量時,能將兔子殺死;2、血量b[i],箭的傷害值d[i],箭的**p[i],均小於等於100000。
分析:貪心+優先佇列。
將兔子排序之後在將弓箭按傷害值排序,之後從大到小列舉兔子,然後從傷害值大到小列舉弓箭,傷害值大於等於當前兔子的弓箭入優先佇列,優先佇列裡面花費小優先,這樣將所有滿足傷害值大於等於當前兔子的弓箭都入佇列之後就可以直接取隊首元素去殺掉當前兔子,刪除隊首元素,然後繼續這一過程就可以了,知道兔子列舉完或者隊列為空。
#include #include #include #include #include #include #include #include using namespace std ;
#define mem(a) memset(a,0,sizeof(a))
#define inf 100000005
int const maxn = 50005;
int b[maxn];
struct node
; bool operator < (const node &u)const
}a[maxn];
bool cmp(node a,node b)
else
else }}
if(j<0)
else puts("no solution");
}return 0 ;
}
51nod1191 消滅兔子 優先佇列
1191 消滅兔子 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地...
51nod 1191 貪心 並查集
首先不得不承認這題寫殘疾了,本來是優先佇列隨便搞一下就過了 確保彈出來的箭能殺死兔子 這裡貼一下當時另一種貪心思想寫的,運用了並查集,對於箭貪心,每次殺能殺死的最大的兔子之後得到解,這裡要用並查集動態維護一下x的箭殺什麼兔子,亂搞一氣也算過了。include include include incl...
51NOD 1191 消滅兔子
1191 消滅兔子 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地...