算法竞赛入门经典例题-勇者斗恶龙
2015-07-06 20:14
225 查看
最近学习算法竞赛入门经典-训练指南,于是在刷题的同时记录到博客上,以便加深印象,更好的记忆。
例题1.勇者斗恶龙
你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头)。村里有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要支付 x 个金币。如何雇佣骑士才能砍掉恶龙所有的头,并且支付最小的金币?注意,一个骑士只能砍一个头并且仅能被雇佣1次
分析:要求是用最少的钱雇佣骑士杀掉所有恶龙,恶龙的数目肯定不得多于骑士的数目,因为每个骑士只能雇佣一次,就算一个骑士能杀掉所有的恶龙。先对每个骑士和龙的能力进行sort排序,然后遍历骑士,用cur表示斩杀掉的龙,每当一个骑士符合条件被雇佣,cur加1,当cur与龙的数目相等的时候就停止。
#include<cstdio> #include<algorithm> using namespace std; const int maxn=20005; int a[maxn],b[maxn]; int main(){ int n,m; while(scanf("%d%d",&n,&m)==2&&n&&m){ for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) scanf("%d",&b[i]); sort(a,a+n); sort(b,b+m); int cur=0; int cost=0; for(int j=0;j<m;j++){ if(b[j]>=a[cur]){ cost+=b[j]; if(++cur==n) break; } } if(cur<n) printf("Loowater is doomed!\n"); else printf("%d\n",cost); } return 0; }
相关文章推荐
- 存储过程使用游标变量返回结果集
- UVa 679 - Dropping Balls
- 解决Android5.0 ListView快速滚动后,接近顶部时滚动方向反向的bug
- 详解Spring MVC 4常用的那些注解
- VMware中安装Linux,鼠标到处跑解决1
- 【Codeforces#311】 div.2 C--E
- LeetCode211:Add and Search Word - Data structure design
- 文章标题
- Android内核开发:从源码树中删除出厂的app应用
- Android内核开发:从源码树中删除出厂的app应用
- 时间之主 解题报告
- senaphore
- Android入门(13)——GridView使用汇总
- 大约apache 2.4.X虚拟主机配置问题的版本号后,
- 抽象工厂模式(Abstract Factory)
- 第0周-JAVA云课堂学习日志
- 从oracle中导出数据表 —— 使用命令行
- 如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结1——Haar特征与积分图
- 结构体浅谈