湫湫**
越減越肥!
最近,**失敗的湫湫為發洩心中鬱悶,在玩乙個消滅免子的遊戲。
遊戲規則很簡單,用箭殺死免子即可。
箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di(1 <= i <= m),每種箭需要一定的qq幣購買。
假設每種箭只能使用一次,每只免子也只能被射一次,請計算要消滅地圖上的所有兔子最少需要的qq幣。
input輸入資料有多組,每組資料有四行;
第一行有兩個整數n,m(1 <= n, m <= 100000),分別表示兔子的個數和箭的種類;
第二行有n個正整數,分別表示兔子的血量bi(1 <= i <= n);
第三行有m個正整數,表示每把箭所能造成的傷害值di(1 <= i <= m);
第四行有m個正整數,表示每把箭需要花費的qq幣pi(1 <= i <= m)。
特別說明:
1、當箭的傷害值大於等於兔子的血量時,就能將兔子殺死;
2、血量bi,箭的傷害值di,箭的**pi,均小於等於100000。output如果不能殺死所有兔子,請輸出」no」,否則,請輸出最少的qq幣數,每組輸出一行。sample input
3 3sample output1 2 3
2 3 4
1 2 3
3 41 2 3
1 2 3 4
1 2 3 1
64解題思路:
優先佇列,先給兔子血量和箭的傷害排下序,把能殺死兔子的箭存到佇列裡面,然後選擇其中**低的就可以了,
實現**:
#include #include#include
#include
#include
using
namespace
std;
#define m 100009
struct
nodeb[m];
inline
bool
cmp(node l,node r)
bool cmp1(int x,int
y)priority_queue
, greater >q;
intmain()
sort(a,a+n,cmp1);
sort(b,b+m,cmp);
int k = m-1
;
for(i=0;i)
if(q.empty())
ans+=q.top();
q.pop();
}if(!flag)
cout
else
cout
<<"no"
<}
return0;
}
HDU4544 湫湫系列故事 消滅兔子
hdu 4544 tags 資料結構,貪心 analysis 將兔子的血量從大到小排序,將箭的殺傷力從大到小排序,對於每乙個兔子血量,將比他大的殺傷力大的劍壓入優先佇列,優先佇列自己重寫,讓它每次丟擲的數為價錢最小。code include include include include using...
HDU 4544 消滅兔子
問題描述 湫湫 越減越肥!最近,失敗的湫湫為發洩心中鬱悶,在玩乙個消滅免子的遊戲。遊戲規則很簡單,用箭殺死免子即可。箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di 1 i m 每種箭需要一定的qq幣購買。假設每種箭只能使用一次,每只免子也只能被射...
hdu 4544 消滅兔子
遊戲規則很簡單,用箭殺死免子即可。箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di 1 i m 每種箭需要一定的qq幣購買。假設每種箭只能使用一次,每只免子也只能被射一次,請計算要消滅地圖上的所有兔子最少需要的qq幣。input輸入資料有多組,每組...