您的位置:首页 > 其它

UVa11292

2016-05-23 17:11 239 查看
Problem: Dragon of Loowater

Description: 一个王国中有N个骑士,有M条恶龙。每个骑士都有一个属性X,代表着这个骑士可以砍掉一头直径不大于X的头的恶龙,并且花费X金币。现在问你这些骑士能不能把所有恶龙的头都砍掉,如果能,那么最低要花费多少钱雇佣他们。

Solution: 看到这个题我们肯定会有一个直觉。那就是让骑士去砍他能砍的头最大的恶龙。恶龙肯定是要都砍完的,那么我们就对恶龙排序,从最小的开始砍。现在问题来了,派谁去砍最小的,当然是派花费最小的去砍。如果他砍不掉就换花费第二小的。这样,就能保证花费最小,并且可能的话,恶龙都会被砍掉。要排两次序。

Code(C++):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int M=20000+5;

int n,m;

int dragon[M];
int soilder[M];

int cmp(const void *a,const void *b)
{
return *((int *)a)-*((int *)b);
}

int main()
{
while(scanf("%d%d",&n,&m),!(!n&&!m)){
for(int i=0;i<n;i++)
scanf("%d",&dragon[i]);
for(int i=0;i<m;i++)
scanf("%d",&soilder[i]);

qsort(dragon,n,sizeof(dragon[0]),cmp);
qsort(soilder,m,sizeof(soilder[0]),cmp);

int ans=0;
int cnt=0;
for(int i=0;i<m;i++){
if(soilder[i]>=dragon[cnt])
ans+=soilder[i],++cnt;
if(cnt==n)
break;
}

if(cnt==n)
printf("%d\n",ans);
else
puts("Loowater is doomed!");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: