排序后用贪心算法,先把输入排序。然后一个一个砍。C++代码如下:
#include<iostream>
#include<algorithm> // 因为用到了sort
using namespace std;
const int maxn = 20000 + 5;
int A[maxn], B[maxn];
int main() {
int n, m;
while(cin>>n>>m && n && m) {
for(int i = 0; i < n; i++) cin>>A[i];
for(int i = 0; i < m; i++) cin>>B[i];
sort(A, A+n);
sort(B, B+m);
int cur = 0; // 当前需要砍掉的头的编号
int cost = 0; // 当前总费用
for(int i = 0; i < m; i++)
if(B[i] >= A[cur]) {
cost += B[i]; // 雇佣该骑士
cur++;
if(cur == n) break; // 如果头已经砍完,及时退出循环
}
if(cur < n) cout<<"Loowater is doomed!"<<endl;
else cout<<cost<<endl;
}
return 0;
}