题目:
有n头恶龙,diameter存其直径,有m个骑士,height存其身高,国王雇佣骑士杀恶龙,佣金为所雇佣骑士身高之和,每个骑士只能杀一条龙且只能被雇一次,求国王需付最少佣金。
思路:
排序 + 贪心
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
int diameter[20005], height[20005];
int main() {
int n, m;
while (scanf("%d %d", &n, &m) && (m||n)){
int i;
memset(diameter, 0, sizeof(diameter));
memset(height, 0, sizeof(height));
for (i = 0; i < n; i++)
scanf("%d",&diameter[i]);
for (i = 0; i < m; i++)
scanf("%d", &height[i]);
if (n > m) {
printf("Loowater is doomed!\n");
continue;
}
sort(diameter, diameter+n);
sort(height,height+m);
int k = 0,sum=0;
for (i = 0; i < m;) {
if (k >= n)
break;
if (diameter[k] <= height[i]){
sum += height[i];
k++;
}
i++;
}
if (k >= n)
printf("%d\n", sum);
else
printf("Loowater is doomed!\n");
}
return 0;
}