UVA - 11292 Dragon of Loowater

题目大意:王国里有n头恶龙,m个勇士,每个勇士有不同的能量值l[i], 以击杀恶龙头直径d[j]小于l[i]的恶龙。雇佣能量值为l[i]的勇士需要l[i]的金钱,每个勇士只能被租用一次,问说如何租用勇士击杀恶龙所用的金钱最小。


解题思路:为了使得金钱的总额最小,那么就要雇佣能量值小得去击杀恶龙,但是又必须保证能将恶龙杀死,所以对于每个恶龙来说,需要租用能量值尽量小且大于恶龙头的直径的勇士,并且没有被租用过。

#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
	int n, m, A[20010], B[20010];
	while (scanf("%d%d", &n, &m), n) {
		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);

		int cnt = 0, ans = 0;
		for (int i = 0, j = -1; i < n && j < m; i++)
			for (j++; j < m; j++)
				if (B[j] >= A[i]) {
					ans += B[j];
					cnt++;
					break;
				}
		if (cnt == n)
			printf("%d\n", ans);
		else
			printf("Loowater is doomed!\n");
	}
	return 0;
}


你可能感兴趣的:(UVA - 11292 Dragon of Loowater)