题目:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2267
题解:
把骑士按照能力从小到大排序,所有的头按照直径从小到大排序,一个一个砍就可以了。不能砍掉的"当前需要砍的头"的骑士就不要雇佣了。
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=20005;
int A[maxn],B[maxn];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
int i;
for(i=0;i<n;i++) scanf("%d",&A[i]);
for(i=0;i<m;i++) scanf("%d",&B[i]);
sort(A,A+n);
sort(B,B+m);
int cur=0;
int cost=0;
for(i=0;i<m;i++)
{
if(B[i]>=A[cur])
{
cost+=B[i];
if(++cur==n) break;
}
}
if(cur<n) printf("Loowater is doomed!\n");
else printf("%d\n",cost);
}
return 0;
}