題目大意:
有頭龍有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);
}
}