您的位置:首页 > 编程语言 > Go语言

Dragon of Loowater UVA - 11292

2017-08-06 09:17 148 查看
传送门


题目大意:有一个恶龙有多个头,勇士雇佣人砍掉他所有的头, 每个勇士的能力为x的话,佣金也为x, 能力为x的勇士能砍掉直径为小于等于x的头。这个勇士想花最少的佣金砍掉恶龙所有的头。每个勇士只能雇佣一次。水~~~~

解题思路:算是贪心法吧,一开始我想到的是进行匹配。对恶龙和佣兵进行排序,从小到大遍历恶龙,找到最小的勇士砍对应的头。如果勇士不够就不能砍掉所有的头。代码写完跟题解差不多...原来这也叫贪心。

AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int dragon[20005];
int warrior[20005];

int main()
{
int n, m;
while(scanf("%d%d", &n, &m) && m+n)
{
for(int i=0;i<n; i++) scanf("%d", &dragon[i]);
for(int i=0;i<m; i++) scanf("%d", &warrior[i]);
sort(dragon, dragon+n);
sort(warrior, warrior+m);
int ok = 1;
int sum = 0;
for(int i=0, j = 0; i<n; i++, j++)
{
while(warrior[j] < dragon[i] && j < m) j++;
if(j == m)
{
ok = 0;
break;
}
sum += warrior[j];
}
if(ok) printf("%d\n", sum);
else printf("Loowater is doomed!\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: