[2016-03-14][UVA][11292][Dragon of Loowater]
Posted 红洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2016-03-14][UVA][11292][Dragon of Loowater]相关的知识,希望对你有一定的参考价值。
- 时间:2016-03-14 19:50:12 星期一
- 题目编号:[2016-03-14][UVA][11292][Dragon of Loowater]
- 题目大意:
- 有m个骑士要砍n条龙,每个骑士能看掉龙的头颅当且仅当其实的能力值大于龙的头的直径,每个其实砍掉一条龙需要付出数值上等于能力值的代价,问m个骑士能否砍完所有龙,能则输出最小代价,否则输出"Loowater is doomed!"
- 输入:
- 多组数据
- 每组数据
- n m
- n行 龙头的直径
- m行 骑士的能力值
- 输出:
- 如果能砍完所有龙,输出最小代价
- 否则输出 "Loowater is doomed!"
- 分析:
- 贪心,骑士从能力低到高开始,每个其实选择第一个自己能对付的龙(龙按头大小排序),能砍下龙脑袋的就计数,不能直接忽略判断下一个,知道所有龙砍完或者骑士枚举完
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; typedef long long LL; #define CLR(x,y) memset((x),(y),sizeof((x))) #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x)) #define FORD(x,y,z) for(int (x)=(y);(x)>=(z);--(x)) const int maxn = 20000 + 100; int a[maxn],b[maxn]; int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,m; while(~scanf("%d%d",&n,&m) && n + m){ FOR(i,0,n) scanf("%d",a + i); FOR(i,0,m) scanf("%d",b + i); sort(a,a+n);sort(b,b+m); int j = 0,ans = 0; FOR(i,0,m){ if(b[i] >= a[j]){ ans += b[i]; if(++j == n) break; } } if(j == n) printf("%d\n",ans); else puts("Loowater is doomed!"); } return 0; } |
以上是关于[2016-03-14][UVA][11292][Dragon of Loowater]的主要内容,如果未能解决你的问题,请参考以下文章