题目大意:
有一堆待砍掉的龙和一定能力值的骑士,雇佣骑士的费用等于骑士的能力值,求雇佣这些骑士的最低费用
大致思路:
贪心,将龙和骑士从小到大排序,
贪心原理
对应每一条龙,能砍掉龙的能力值最低的骑士就雇佣。
c++:
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=20000+10;
int dragon[MAXN],knight[MAXN];
int main(){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
if(m==0&&n==0)
break;
for(int i=0;i<m;i++)
scanf("%d",&dragon[i]);
for(int i=0;i<n;i++)
scanf("%d",&knight[i]);
sort(dragon,dragon+m);
sort(knight,knight+n);
int j=0,ans=0,killed=0;
for(int i=0;i<m;i++){
while(j!=n&&knight[j]<dragon[i])
j++;
if(j==n)
break;
else if(knight[j]>=dragon[i]){
ans+=knight[j];
killed++;
j++; //砍完后就要轮到下一个骑士了
}
}
if(killed==m) //如果都砍完了
printf("%d\n",ans);
else
printf("Loowater is doomed!\n");
}
return 0;
}