Dragon of Loowater UVA - 11292
题意:
有n个头,m个骑士,每个骑士可以砍到不超过x的头,且要付x元。、
问:
怎样分配使得支出最少,且屠龙成功。
思路:
- 对头的直径从小到大排序。
- 对骑士从小到大排序。
- 之后砍头即可,一直到砍倒n个头为止。
AC
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int maxn = 2e4+10;
ll a[maxn], b[maxn];
int main()
{
//ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m;
while(scanf("%d%d", &n, &m) &&(n||m)){
For(i,1,n)cin>>a[i];
For(i,1,m)cin>>b[i];
ll ans = 0, cnt = 1;
sort(b+1, b+1+m);
sort(a+1, a+1+n);
For(i,1,m){
if(b[i]>=a[cnt]){
ans += b[i];
cnt++;
if(cnt > n)break;
}
}
if(cnt > n)printf("%lld\n", ans);//cout<<ans<<endl;
else printf("Loowater is doomed!\n");
}
return 0;
}