一道贪心题
拿到的思想就是用最小的代价解决敌人的每一个头。
何谓最小的代价?
就是说每次消耗的士兵要尽量少浪费
那么把两个数组排序
对于士兵能力数组 循环 标记k为解决到的敌人的头的次序
每次找到一个比 敌人[k]大的 直接 k++ ans+=arr【i】;
轻松解决
#include<iostream>
#include<cstdio>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=20001;
int dragon[maxn];
int arr[maxn];
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m),n)
{
for(i=0;i<n;++i)
scanf("%d",&dragon[i]);
for(i=0;i<m;++i)
scanf("%d",&arr[i]);
if(m<n)
{
printf("Loowater is doomed!\n");
continue;
}
sort(dragon,dragon+n);
sort(arr,arr+m);
bool fin=0;
int k=0;
int ans=0;
for(i=0;i<m;++i)
{
if(arr[i]>=dragon[k])
{
ans+=arr[i];
k++;
}
if(k==n)
{
fin=1;
break;
}
}
if(fin)
printf("%d\n",ans);
else
printf("Loowater is doomed!\n");
}
return 0;
}