1191 消滅兔子(貪心,優先佇列)

2021-09-29 18:51:07 字數 1233 閱讀 3472

有n只兔子,每只有乙個血量b[i],需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d[i],**為p[i](1 <= i <= m)。假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子最少需要多少q幣。如不能殺死所有兔子,請輸出no solution。

特別說明:1、當箭的傷害值大於等於兔子的血量時,能將兔子殺死;2、血量b[i],箭的傷害值d[i],箭的**p[i],均小於等於100000。

輸入第1行:兩個整數n,m,中間用空格分隔(1 <= n, m <= 50000),分別表示兔子的個數和箭的種類。

第2 - n + 1行:每行1個正整數(共n行),表示兔子的血量b[i](1 <= b[i] <= 100000)。

第n + 2 - n + m + 1行:每行2個正整數(共m行),中間用空格分隔,表示箭所能造成的傷害值d[i],和需要花費的q幣p[i](1 <= d[i], p[i] <= 100000)。

輸出輸出最少需要多少q幣才能消滅所有的兔子。如果不能殺死所有兔子,請輸出"no solution"。

輸入樣例

3 3123

2 13 2

4 3輸出樣例

6兔子從命大的找齊,防止原來可以win的變成game over

把每次傷害大於等於血量的彈進優先佇列

若隊列為空則殺不死

#includeusing namespace std;

struct node

}b[50005];

struct point

}f;int a[50005];

priority_queueq;

int main()

for (i = 1;i <= m;i++)

cin>>b[i].d>>b[i].p;

sort

(a+1,a+1+n)

;sort

(b+1,b+1+m)

; k=-1;

for(i=1;i<=m;i++)

if (b[i].d>=ans)

if (k==-1)

cout<<"no solution"

; else

while (!q.empty())

k=i+1;}if

(n==0)

cout<;

else

cout<<"no solution";}

return 0;

}

51nod1191 消滅兔子 優先佇列

1191 消滅兔子 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地...

1191 消滅兔子

有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地圖上的所有兔子最少需要多少q幣。如不能殺死所有兔子,請輸出no solution。特別說明 1 當箭的傷...

51NOD 1191 消滅兔子

1191 消滅兔子 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n只兔子,每只有乙個血量b i 需要用箭殺死免子。有m種不同型別的箭可以選擇,每種箭對兔子的傷害值分別為d i 為p i 1 i m 假設每種箭只能使用一次,每只免子也只能被射一次,計算要消滅地...