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

uva11292-Dragon of Loowater

2013-07-08 18:39 351 查看
题目大意:

有头龙有n个头,你雇佣骑士去砍掉这些头,一共有m个骑士,一个骑士对应有一个能力值x,同时x也代表你雇佣他的费用,只有当能力值大于或等于龙头的大小时可以砍掉这个头,你现在需要计算的是杀死这头龙(砍掉所有龙头)最小的雇佣费用。

输入:

第一行两个整数,n,m当n,m都为零时结束

接下来n行为头的大小、在接下来m行是m个骑士的能力值x。

输出:

每组数据输出最小的雇佣费用。

分析:

这道题目属于贪心,我们应该尽量选择能力值与头大小相近(大于等于)的骑士去砍这个头,这样所需要的费用是最少的,所以可以按骑士的能力值排序(小到大),再将龙头大小排序,然后循环判断是否i骑士可以杀死j龙头,如果可以,则雇佣该骑士。

分类:简单贪心

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxlen 20010
using namespace std;
int n,m;
int head[maxlen],ability[maxlen];
int main ()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
for(int i=0;i<n;++i)
scanf("%d",&head[i]);
for(int i=0;i<m;++i)
scanf("%d",&ability[i]);
sort(head,head+n);
sort(ability,ability+m);
int j=0,ans=0;
for(int i=0;i<m;++i)
{
if(ability[i]>=head[j])
{
ans+=ability[i];
j++;
}
if(j==n)
break;
}
if(j<n)
printf("Loowater is doomed!\n");
else
printf("%d\n",ans);
}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: