51NOD 1191 消滅兔子

2021-07-22 17:32:13 字數 1535 閱讀 9336

1191 消滅兔子

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 難度:4級演算法題

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

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

input

第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)。

output

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

solution"。

input示例33

1232

1324

3output示例

6

貪心+優先佇列

首先 將兔子血量從大到小排序

箭按傷害從大到小排序

明顯 要殺死兔子i

使用傷害》=b[i] 且消耗q幣最少的箭 是最優方案

每次將傷害》=b[i]的箭消耗的qb放進小頂堆中,然後取出最小值

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

using

namespace

std;

#define ll long long

#define ull unsigned long long

#define pii pair

#define inf 1000000007

const

int n=50000+5;

int b[n];

pii arrow[n];

ll slove(int n,int m)

return cost;

}int main()

return

0;}

51 Nod 1191消滅兔子

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

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 當箭的傷...