题意:有N条龙,M个骑士,一个能力值为X的骑士只能砍掉直径步超过X的龙,且要支付X个金币,求将所有龙杀死的最小金币,一个骑士只能杀死一个龙,分别排序
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 20005; int n,m; int dra[MAXN],cost[MAXN]; int main(){ while (scanf("%d%d",&n,&m) != EOF && n+m){ for (int i = 0; i < n; i++) scanf("%d",&dra[i]); for (int j = 0; j < m; j++) scanf("%d",&cost[j]); sort(dra,dra+n); sort(cost,cost+m); int ans = 0; int flag = 0,k = 0; if (n > m){ printf("Loowater is doomed!\n"); continue; } for (int i = 0; i < n; i++){ while (k < m){ if (cost[k] >= dra[i]) break; k++; } if (k >= m){ flag = 1; break; } ans += cost[k++]; } if (flag) printf("Loowater is doomed!\n"); else printf("%d\n",ans); } return 0; }