勇者鬥惡龍

2021-10-06 22:06:50 字數 1638 閱讀 6041

有n個頭的惡龍,你希望僱一些騎士把它殺死(即砍掉所有頭)。

村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍

乙個直徑不超過x的頭,且需要支付x個金幣。

如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?

注意,乙個騎士只能砍乙個頭(且不能被僱傭兩次)

輸入格式

多組資料,每組資料的第一行為正整數n和m(1<=n,m<=200000);以下n行每行為乙個整數,即惡龍每個頭的直徑;以下m行每行為乙個整數,即每個騎士的能力。輸入結束標誌n=m=0;

輸出格式

輸出格式:每組資料,輸出最少花費,無解輸出"loowater is doomed!"

輸入樣例

2 35 4

7 8 4

2 15 5

100 0

輸出樣例

11loowater is doomed!

1.勇士與龍考察點比較簡單明顯,主要在排序這一塊;

但是不同的儲存結構有不同的排序方式,所以我這裡用兩種方式來解題。

2.先說說第一種:用靜態陣列來儲存資料,然後用標頭檔案中的sort()函式來排序(當然也可以自己寫乙個快排函式)。

3.再說說第二種:用stl模板中的結構來儲存資料,因為set會自動排序(紅黑樹),所以排序這一步實現就完成了。

4.還需要注意的一點是 資料溢位,cost可能會溢位,所以其資料型別最好設為long long.

5.將龍頭大小和勇士能力按從小到大排序後,設乙個指標指向第乙個龍頭;

然後可以從頭開始遍歷勇士能力,如果大於或等於指標指向龍頭直徑,指標後移;

如果指標已經到末尾,則輸出最小花費;

如果遍歷完畢,指標還未到末尾則輸出 loowater is doomed!

(1)

#include

#include

#include

using

namespace std;

const

int maxn=

200005

;int a[maxn]

,b[maxn]

;int

main()

}if(curprintf

("loowater is doomed!\n");

else

printf

("%d\n"

,cost);}

return0;

}

(2)

#include

#include

#include

const

int maxn=

300000

;using

namespace std;

intmain()

else}if

(it==t.

end())

printf

("%lld\n"

,cost);}

return0;

}

勇者鬥惡龍

一 勇者鬥惡龍 你的王國有一條n個頭的惡龍,你希望顧一些騎士把他殺死 即砍掉所有的頭 村中有m個騎士可以僱傭,乙個能力值位x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有的頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 輸...

勇者鬥惡龍

你的王國裡有一條n個頭的惡龍,你希望僱傭一些騎士把它殺死 砍掉所有的頭 村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍乙個致敬不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍乙個頭 且不能被僱傭兩次 輸入格式 輸入包含多組資料。...

勇者鬥惡龍

的王國裡有一條n個頭的惡龍,你希望僱一些騎士把它殺死 即砍掉所有頭 村里有m個騎士可以僱傭,乙個能力值為x的騎士可以砍掉惡龍乙個直徑不超過x的頭,且需要支付x個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍掉乙個頭 且不能被僱傭兩次 輸入輸入包含多組資料。每組資料...