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

UVA 11292 The Dragon of Loowater(贪心)

2013-07-31 20:50 288 查看
题意:有n个头的恶龙,需要杀掉它。现在有m个骑士可以雇佣,每个能力值为x的骑士可以砍掉一个直径不超过x的龙头,且需要支付x金币。现在让你求出将恶龙杀掉所需要的最少支付金币的数量,如果不能杀掉输出“Loowater is doomed!”。

思路:排序之后直接贪心。每次用能力值最少去杀直径最小的龙头(前提可以杀掉),直到杀完或者杀不掉为止。
#include<stdio.h>
#include<algorithm>

bool cmp(int x,int y)
{
return x<y;//降序排列
}
//直接排序后贪心每次用值最小的骑士去砍龙的头直到全部砍完或者没有可以砍得为止
using namespace std;
int main()
{
int n,m,i,j;
int dragon[20000+10],people[100000+10];//龙头直径和骑士的能力值
while(scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
int ans=0,count=0;//count统计已经砍掉了几个头
for(i=0;i<n;i++)
scanf("%d",&dragon[i]);
for(i=0;i<m;i++)
scanf("%d",&people[i]);
if(n>m)
printf("Loowater is doomed!\n");
else
{
j=0;
sort(dragon,dragon+n,cmp);
sort(people,people+m,cmp);
j=0;
for(i=0;i<m;i++)//枚举每个骑士
{
if(dragon[j]<=people[i])
{
count++;
ans+=people[i];
j++;
}
if(count==n)
break;
}
if(count!=n)
printf("Loowater is doomed!\n");
else
printf("%d\n",ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: