uva11292-Dragon of Loowater

题目大意:

有头龙有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);
    }

}

  

posted @ 2013-07-08 18:39  默默如潮  阅读(204)  评论(0编辑  收藏  举报