题意就是每个勇士有个能力值,恶龙有多个头,一个勇士的能力值要大于恶龙的一个头的能力值,就可以将一个头砍掉,一个勇士只能用一次,雇佣的价格等于勇士的能力值,问是否能将恶龙的头全部砍掉,若能输出最小花费。
算法: 对勇士能力值从小到大排序,对恶龙的能力值排序,然后一一比对就可以了。
post code:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 20000+20
int dragon[maxn],knight[maxn];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
if( (n==0)&&(m==0) )break;
for(int i=1;i<=n;i++)
scanf("%d",&dragon[i]);
for(int i=1;i<=m;i++)
scanf("%d",&knight[i]);
sort(dragon+1,dragon+n+1);
sort(knight+1,knight+m+1);
int i,j=1,sum=0;
for(i=1;i<=m;i++){ //warrior kill one head of a dragon
if(knight[i]>=dragon[j]){
sum+=knight[i];
j++;
if(j==n+1)break;
}
}
if(j==n+1)printf("%d\n",sum);
else printf("Loowater is doomed!\n");
}
return 0;
}