uva 11292

题意:有n条恶龙,m个骑士,每个骑士能够斩掉直径为x的恶龙需要支付他x的费用,如何聘请骑士费用最小

输入:整数n,m  每个龙的直径,每个骑士的能力(费用)

输出:最小费用,无解则输出Loowater is doomed

 

解法:贪心

 

#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <queue>
using namespace std;

///宏定义
const int  INF = 990000000;
const int MAXN = 50010;
const int maxn = MAXN;
///全局变量 和 函数

int n, m;
int main()
{
    freopen("D:\\input.txt", "r", stdin); 
    ///变量定义
    while (scanf("%d %d", &n, &m) && n && m)
    {
        int cost = 0;
        priority_queue<int, vector<int>, greater<int> > dragon, worrior;
        for (int i = 0; i < n; i++)
        {
            int t;
            scanf("%d", &t);
            dragon.push(t);
        }
        for (int i = 0; i < m; i++)
        {
            int t;
            scanf("%d", &t);
            worrior.push(t);
        }
    
        //核心
        while (!dragon.empty())
        {
            int cur = dragon.top();
            bool flag = false;
            while (!worrior.empty())
            {
                int w = worrior.top();
                worrior.pop();
                if (w >= cur)
                {
                    cost += w;
                    flag = true;
                    break;
                }        
            }
            if (!flag)
            {
                break;
            }
            dragon.pop();
        }

        if (!dragon.empty())
            printf("Loowater is doomed!\n");
        else
            printf("%d\n", cost);
            
    }


    ///结束
    return 0;
}

 

  

posted on 2013-09-16 10:25  小书包_Ray  阅读(118)  评论(0编辑  收藏  举报

导航