UVA 11292

来源:互联网 发布:电脑运行apk软件 编辑:程序博客网 时间:2024/05/16 07:21

题目大意:氪金勇者斗恶龙,有n头恶龙,m个勇者,一个勇者只能斗一头龙,每头恶龙和每个勇者都有能力值,只有勇者的能力值不低于恶龙的能力值时才打得过。问,能否打完全部恶龙,能的话至少需要多少金币,出战的勇者能力值与需要的金币数一致。

解题思路:贪心,排序恶龙勇者能力值。从勇者小的往上推,当大于等于恶龙时,金币数增加,恶龙增加,勇者增加,屠龙数增加。最后判断屠龙数是否等于恶龙数。

ac代码:

#include <iostream>#include <algorithm>using namespace std;int main()  {  int n, m, a[20005], b[20005], sum, cnt;while (scanf("%d%d", &n, &m)!=EOF && n && m){sum = cnt = 0;for (int i=0; i<n; i++)scanf("%d", &a[i]);for (int i=0; i<m; i++)scanf("%d", &b[i]);sort(a, a+n);sort(b, b+m);for (int i=0,j=0; i<n && j<m; j++)if (b[j] >= a[i])sum += b[j], i++, cnt++;if (cnt == n)printf("%d\n", sum);elseprintf("Loowater is doomed!\n");}return 0;  }