uva11292-Dragon of Loowater

weixin_34104341發表於2020-04-07

題目大意:

有頭龍有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);
    }

}

  

轉載於:https://www.cnblogs.com/shuzy/p/3178552.html