算法很没:快速渡河问题
题目描述
N个人希望只乘一条船过河,每条船最多只能载两个人。因此,必须安排谁去与回来,以便所有人最快过河。每个人都有不同的划船速度;两个人速度取决于较慢者。请给出时间最短的策略。
输入值
输入的第一行包含一个整数T(1 <= T <= 20),即测试用例的数量。然后是T例。每例的第一行N,第二行包含N个人过河的秒数。每个案例前面都有一个空白行。人数不超过1000,每人的时间不超过100秒输出量
对于每个测试用例,打印一行N个人穿过河流所需的总秒数。
解析
由于渡河速度取决于两个人中速度最慢的量,则可每次优先将最慢的两个人送到对岸,那么渡河可分为两种情况:
①由最快的人带最慢的两个人过河
②最快的两人坐一条船,速度最快的回去,最慢的两人单独坐一条船,由速度第二快的人划回
代码
static int times;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int T=scanner.nextInt();int[][] cases=new int[T][];for (int i = 0; i < T; i++) {int N=scanner.nextInt();int[] speed=new int[N];for (int j = 0; j < N ; j++) {speed[j]=scanner.nextInt();}cases[i]=speed;}for (int i = 0; i < cases.length; i++) {times=0;solve(cases[i],cases[i].length);}}private static void solve(int[] speed,int cntOfPerple) {Arrays.sort(speed);while (cntOfPerple>0) {if(cntOfPerple==1) {times+=speed[0];System.out.println(times);return ;}if (cntOfPerple==2) {times+=speed[1];System.out.println(times);return;}if(cntOfPerple==3) {int a=speed[0]+speed[1]+speed[2];int b=speed[1]+speed[1]+speed[2];times+=minOf(a,b);System.out.println(times);//退出循环return; }//最慢两个先通过方法if((speed[0]+2*speed[1]+speed[cntOfPerple-1])<(2*speed[0]+speed[cntOfPerple-2]+speed[cntOfPerple-1])) {times+=speed[0]+2*speed[1]+speed[cntOfPerple-1];//每次送过去最后两人cntOfPerple-=2;}else {times+=2*speed[0]+speed[cntOfPerple-2]+speed[cntOfPerple-1];}}}private static int minOf(int a, int b) {if(a>=b)return b;return a;}
算法很没:快速渡河问题相关推荐
- 算法很美——数学问题
算法很美--数学问题 题1:天平称重 问题描述: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 砝码重量分别是1,3,9,27,81--3的指数次幂,每种重量砝码只有一个 则它们可以 ...
- 步进电机调速,S曲线调速算法很香
[导读] 大家好,我是逸珺. 今天想分享一种超级实用的步进电机调速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案. 梯形调速算法 为啥需要设计一个调速算法呢?步进电机不是给多少脉冲就动多 ...
- Rabin-Karp 算法(字符串快速查找)
Rabin-Karp 算法(字符串快速查找) 算法 代码 算法 Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法.Rabin-Karp 算法是基于这样的思路 ...
- poj1700快速渡河问题(贪心策略,详细解析)
二.快速渡河问题 翻译为中文 一队人(N个人)期望跨河,有一条船,一次只能载2个人,过河之后需要有一个人划回来,所有人才能够跨河,每个人划船速度都不同,两个人一组整体速度是由划船速度较慢的决定的.问题 ...
- 算法很美-位运算-找出落单的那个数
上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...
- 蒙哥马利幂模算法(二分快速幂)
蒙哥马利幂模算法(二分快速幂) 用于加快幂次取模运算的速度. 形式为这种ab%c 可以等于 (ab1%c)*(ab2%c)%c,其中b=b1+b2:如果b1=b2就更简便一些,(ab/2%c)2%c, ...
- 页眉单独应用到一页_有没有把电影票、门票等票根储存起来的 App,单独拍照很没感觉...
票夹是一款非常有意义的 iPhone 应用,只需要用相机拍下纸质票据的票根,再加上地点.人物.心情.金额等信息一起记录下来,最终通过时间线让记忆永不褪色.@Appinn 来自微博的问题: 麻烦一下,想 ...
- 极值跟踪算法 c语言,快速约束极值子空间跟踪算法_魏志强.pdf
快速约束极值子空间跟踪算法_魏志强 34 4 Vol. 34 No. 4 第 卷第 期 华 北 水 利 水 电 学 院 学 报 2013 8 Journal of North China Instit ...
- 快速幂算法(矩阵快速幂还不是很会。。日后会更新)
PS:转载,自己写的不如人家,怕误导.转载地址:http://www.cnblogs.com/CXCXCXC/p/4641812.html 首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照 ...
最新文章
- 【ASP.NET】服务器控件大演练与实例分析
- python的断点调试
- 读书笔记 - 《乌合之众》
- 小程序实现无限瀑布流
- c语言中typeof关键字
- 用spss做哑变量--给不敲代码同学福音
- Java集合查找Map,Java集合框架中Map接口的使用
- 陆游书法真迹,堪称书法大家!
- TMS320F2837x + Spartan6/国产FPGA低成本高实时注塑机运动控制器软硬件设计方案
- 互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
- hdu 3987 求割边最少的最小割
- 教你如何一步一步制作自己的PCB个人LOGO
- kali源代码简单说明
- Am3358增加Uboot的logo显示 增加Uboot自定义命令控制LCD
- 2023移动光猫H2-2超级密码获取教程(可改桥接)
- spring hateoas初体验
- 公司网站建设的几点建议—竹晨网络
- 变量的基本使用Day2
- 天气选择页面html,CSS3 天气预报界面组件
- wms系统对仓库进行集中管理
热门文章
- python面向对象基础-01
- ppt to html c,PPTC参数.pdf
- 计算机应用知识试题 上学吧,自考计算机应用高分技巧,自考计算机应用作答技巧...
- shell子串截取的三种用法:
- vue-router路由防卫
- F-Measure MCC ROC Area PRC Area_2021国考报名入口:http://zw.offcn.com/gj/?area=gdamp;scode=ljx19564...
- Audified U73b 复古压缩器评测:带来复古温暖的色彩
- css3八卦,CSS3 阴阳八卦(太极)图动画
- mysql存储指纹,mysql - ZKTeco 4500指纹验证 - 堆栈内存溢出
- 码码在线考勤系统笔记(三)