勇者斗恶龙
2016-06-12 23:47
183 查看
有n个头的恶龙,m个骑士可以雇佣,
一个能力值为x的勇士可以砍掉直径不超过x的头,且需要佣金x个金币,
如何雇佣骑士砍掉所有的头使支付金币最少(一个骑士只能砍一个头)
/*输入输出示例
输入:
2 3
5
4
7
8
4
2 1
5
5
10
0 0
输出:
11
Loowater is doomed!
*/
一个能力值为x的勇士可以砍掉直径不超过x的头,且需要佣金x个金币,
如何雇佣骑士砍掉所有的头使支付金币最少(一个骑士只能砍一个头)
int main() { int n,m,temp,sum; int x[20],e[20]; while(scanf("%d %d",&n,&m)&&n!=0&&m!=0) { int ***k=-1;*** //k=-1的赋值的位置比较重要 for(int i=0; i<n; i++) scanf("%d",&e[i]); for(int i=0; i<m; i++) scanf("%d",&x[i]); for(int i=0; i<n; i++) for(int j=i+1; j<n; j++)//将给出的e ,x[m]按从大到小冒泡排序 { if(e[i]<e[j]) { temp=e[i]; e[i]=e[j]; e[j]=temp; } } for(int i=0; i<m; i++) for(int j=i+1; j<m; j++) { if(x[i]<x[j]) { temp=x[i]; x[i]=x[j]; x[j]=temp; } } **sum=0**;//sum=0的赋值位置确定 for(int i=0; i<n; i++) { **if(k==-2)//和后面k=-2时的break一起,可以跳出二重循环 break;** k=-2; for(int j=0; j<m; j++) { if((e[i]<=x[j])&&(x[j]!=0))//头i<=xj且xj没有被雇佣过 k=j; } **if(k==-2)** { printf("Loowater is doomed!\n"); **break;** } sum+=x[k]; x[k]=0;//用0标记xj,表示其被雇佣过 if(i==n-1) printf("%d\n",sum); } return 0; }
/*输入输出示例
输入:
2 3
5
4
7
8
4
2 1
5
5
10
0 0
输出:
11
Loowater is doomed!
*/
相关文章推荐
- iOS开发之百度免费API使用案例(身份证号获取地址、手机号查归属地、MD5解密等)
- Chapter 3. 数据检索(查询)---select、top...order by、distinct、where条件查询、分组查询、模糊查询、null处理
- linux命令和工具
- 《人月神话》阅读笔记(一)
- 多项式相加单链表实现
- Exynos4412搭建最小文件系统
- 洛谷P1262 间谍网络
- 相机标定:单目图像矫正分析
- cocos2dx在vs运行正常,在Android编译正常,运行错误的一个原因
- runtime -- 实现字典转模型
- Python中进行布尔类型处理时的特殊点
- leetcode 26. Remove Duplicates from Sorted Array
- jquery.validata1.11怎么支持metadata
- iOS开发大神必备的Xcode插件
- uva439 Knight Moves
- 英语钻石法则(二)------没必要专门的学习语法
- Boost中的容器boost::tuple
- 一对多关联查询
- 计蒜客 2016计蒜之道比赛 初赛第四场 记录
- Redis单实例安装与配置