UVA11292 The Dragon of Loowater
阿新 • • 發佈:2018-11-04
題意: 國王要殺惡龍, 需要僱傭騎士。 每個騎士只能殺一條龍。 當騎士身高 不小於 龍頭時, 騎士可以砍下龍頭。 僱傭騎士需要錢, 錢就等於他的身高。 如果騎士能成功砍下所有的龍頭, 則輸出僱傭總費最少的數值, 否則輸出那句鳥語。
思路: 排序+貪心。 先把龍頭跟騎士身高各自從小到大排序, 然後從頭到尾比較。 若能砍下則僱傭, 否則用下一個騎士。 直到龍頭砍完, 或者騎士用完。
#include<cstdio> #include<algorithm> #include<cstring> #define M(a) memset(a, 0, sizeof(a)) using namespace std; const int maxn = 20000 + 10; int head[maxn], knight[maxn]; int main() { int n, m; while(scanf("%d%d", &n, &m) == 2 && n && m) { long long ans = 0; M(head); M(knight); int phead = 0, pknight = 0; for(int i = 0; i < n; i++) scanf("%d", &head[i]); for(int i = 0; i < m; i++) scanf("%d", &knight[i]); sort(head, head + n); sort(knight, knight + m); while(phead < n && pknight < m) { if(head[phead] <= knight[pknight]) { ans += knight[pknight++]; phead++; } else pknight++; } if(phead < n) printf("Loowater is doomed!\n"); else printf("%lld\n", ans); } return 0; }