UVA - 11292 Dragon of Loowater


题意:有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;
}

你可能感兴趣的:(UVA - 11292 Dragon of Loowater)