问题链接:UVA11292 HDU1902 POJ3646 The Dragon of Loowater。
题意简述:(略)
问题分析:
这个问题是一个典型的贪心法问题,求代价最小。
由于需要用到排序函数,C++的排序函数参数比较简单,所以用C++编程。
程序说明:(略)
AC通过的C++语言程序如下:
/* UVA11292 HDU1902 POJ3646 Dragon of Loowater */
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 20000
int dragon[MAXN+1], knight[MAXN+1];
int main(void)
{
int n, m;
while(scanf("%d%d", &n, &m) != EOF) {
// 结束条件判定
if(n == 0 && m == 0)
break;
// 读入数据
for(int i=0; i<n; i++)
scanf("%d", &dragon[i]);
for(int i=0; i<m; i++)
scanf("%d", &knight[i]);
// 排序:从小到大
sort(dragon, dragon+n);
sort(knight, knight+m);
// 贪心计算
int cost = 0;
int dcount = 0;
for(int i=0; i<m; i++) {
if(knight[i] >= dragon[dcount]) {
cost += knight[i];
// 全部砍完的话,结束
if(++dcount == n)
break;
}
}
// 输出结果
if(dcount == n)
printf("%d\n", cost);
else
printf("Loowater is doomed!\n");
}
return 0;
}