问题链接: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 ", cost); else printf("Loowater is doomed! "); } return 0; }