有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個金幣。如何僱傭騎士才能砍掉惡龍的所有頭,且需要支付的金幣最少?注意,乙個騎士只能砍掉乙個頭 且不能被僱傭兩次 輸入輸入包含多組資料。每組資料...