人过河 问题
来源:互联网 发布:初学者买哪款单片机好 编辑:程序博客网 时间:2024/05/19 18:41
有一群人 在河的另一面 只有一只船 船多可以承载两个人 每人过河的时间不一样 若两人一起过 按最长的时间计算 问 需要最少需要花费多长时间?</p><p> ex:</p input 4
1 2 5 10
output 17
思路 找出两个最小的 送过去
返回用时最小的
送出用时最大的两个
循环
全部过完
#include<iostream>using namespace std;int a[100];int b[100];int time = 0;int num ;int count =0;//开出两最小的int TransMin(){int i,max=0; for(i=0;i<num;i++){ if(a[i] != 0) { b[i] = a[i]; a[i] = 0; i++; break; }}while(i<num){if(a[i] != 0){max = a[i];b[i] = a[i];a[i] = 0;break;}i++;}count++;return max;}//返回最小的int Backmin(){ int i,min=0; for(i = 0; i<num; i++) { if(b[i] != 0) {a[i] = b[i]; min = b[i];b[i]=0; break; } } return min;}//开出两最大的int TransMax(){ int i,max=0; for(i = num-1; i >=0; i--) { if(a[i] != 0) { max = a[i]; b[i] = a[i]; a[i] = 0; i--; break; } } while(i != -1) { if(a[i] != 0) { b[i] = a[i]; a[i] = 0; break; } i--; } count++; return max;}//判断数组是否满bool AEmpty(){int i,count=0; for(i = 0; i<num; i++) { if(a[i] ==0) { count++; } } if (count == num) { return true; } else { return false; }}int main(){ cin>>num; for (int i = 0 ; i<num; i++) { cin>>a[i]; } while(!AEmpty()) { time+=TransMin(); if(AEmpty())break; time+=Backmin(); time+=TransMax(); if(AEmpty())break; time+=Backmin(); } cout<<count <<endl; cout<<time<<endl; return 0;}
0 0
- 4人过河问题
- 人过河 问题
- 多人过河问题
- SDUT2868_n人过河问题(贪心)
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- 过河问题
- Jquery 常用用法
- 正则总结
- linux下每天定时备份mongo
- android点击按钮调转到指定Fragment并指定activity方法
- word中如何批量修改替换超链接路径地址?
- 人过河 问题
- SD卡与fatfs文件系统(5)-在fatfs中使用多个SD卡分区
- stm8用ST-Link下载时出现Connection error
- 我的不过范德萨就好过放电
- fprintf和fwrite的区别
- 【LeetCode】Evaluate Reverse Polish Notation
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 2014-11-25 bec复习打卡
- 求二叉树的深度和宽度