HDU 4544 消滅兔子

2021-07-24 13:36:58 字數 1585 閱讀 8527

【問題描述】  

湫湫**,越減越肥!   

最近,**失敗的湫湫為發洩心中鬱悶,在玩乙個消滅免子的遊戲。   

遊戲規則很簡單,用箭殺死免子即可。

箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di(1

<= i <= m),每種箭需要一定的qq幣購買。

假設每種箭只能使用一次,每只免子也只能被射一次,請計算要消滅地圖上的所有兔子最少需要的qq幣。

【輸入格式】

第一行有兩個整數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。

【輸出格式】

如果不能殺死所有兔子,請輸出」no」,否則,請輸出最少的qq幣數,每組輸出一行。

【輸入樣例】

【樣例1】 33

1232

3412

3【樣例2】 34

1231

2341

231【輸出樣例】

【樣例1】

6【樣例2】

4【資料範圍】

20%的資料:0

50%的資料:0

100%的資料:0

這題沒什麼好做的,把箭和兔子排個序,迴圈每只兔子找最優的箭,可以用優先佇列優化。

#include

#include

#include

#include

#define maxn 100005

using

namespace

std;

int b[maxn];

struct arrow

aw[maxn];

bool cmp1(arrow a,arrow b)

};priority_queue,cmp>q;

int main()

for(int i=0;iscanf("%d",&aw[i].d);

}for(int i=0;iscanf("%d",&aw[i].p);

}if(n>m)

sort(b,b+n);

sort(aw,aw+m,cmp1);

int t=m-1;

bool ok=1;

long

long ans=0;

for(int i=n-1;i>=0;i--)

if(q.empty())

ans+=q.top();

q.pop();

}if(ok) cout

printf("no\n");

return

0;}

hdu 4544 消滅兔子

遊戲規則很簡單,用箭殺死免子即可。箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di 1 i m 每種箭需要一定的qq幣購買。假設每種箭只能使用一次,每只免子也只能被射一次,請計算要消滅地圖上的所有兔子最少需要的qq幣。input輸入資料有多組,每組...

HDU4544 湫湫系列故事 消滅兔子

hdu 4544 tags 資料結構,貪心 analysis 將兔子的血量從大到小排序,將箭的殺傷力從大到小排序,對於每乙個兔子血量,將比他大的殺傷力大的劍壓入優先佇列,優先佇列自己重寫,讓它每次丟擲的數為價錢最小。code include include include include using...

hdu 4544 湫湫系列故事 消滅兔子

湫湫 越減越肥!最近,失敗的湫湫為發洩心中鬱悶,在玩乙個消滅免子的遊戲。遊戲規則很簡單,用箭殺死免子即可。箭是一種消耗品,已知有m種不同型別的箭可以選擇,並且每種箭都會對兔子造成傷害,對應的傷害值分別為di 1 i m 每種箭需要一定的qq幣購買。假設每種箭只能使用一次,每只免子也只能被射一次,請計...