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; }