题目描述

  • 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:天平称重 问题描述: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 砝码重量分别是1,3,9,27,81--3的指数次幂,每种重量砝码只有一个 则它们可以 ...

  2. 步进电机调速,S曲线调速算法很香

    [导读] 大家好,我是逸珺. 今天想分享一种超级实用的步进电机调速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案. 梯形调速算法 为啥需要设计一个调速算法呢?步进电机不是给多少脉冲就动多 ...

  3. Rabin-Karp 算法(字符串快速查找)

    Rabin-Karp 算法(字符串快速查找) 算法 代码 算法 Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法.Rabin-Karp 算法是基于这样的思路 ...

  4. poj1700快速渡河问题(贪心策略,详细解析)

    二.快速渡河问题 翻译为中文 一队人(N个人)期望跨河,有一条船,一次只能载2个人,过河之后需要有一个人划回来,所有人才能够跨河,每个人划船速度都不同,两个人一组整体速度是由划船速度较慢的决定的.问题 ...

  5. 算法很美-位运算-找出落单的那个数

    上级目录:算法很美 1. 题目 一个数组里除了某一个数字之外,其他的数字都出现了两次.请写程序找出这个只出现一次的数字. 2. 异或思路 异或的运算是A ^ A=0,也就是说偶数个相同的元素异或,结果 ...

  6. 蒙哥马利幂模算法(二分快速幂)

    蒙哥马利幂模算法(二分快速幂) 用于加快幂次取模运算的速度. 形式为这种ab%c 可以等于 (ab1%c)*(ab2%c)%c,其中b=b1+b2:如果b1=b2就更简便一些,(ab/2%c)2%c, ...

  7. 页眉单独应用到一页_有没有把电影票、门票等票根储存起来的 App,单独拍照很没感觉...

    票夹是一款非常有意义的 iPhone 应用,只需要用相机拍下纸质票据的票根,再加上地点.人物.心情.金额等信息一起记录下来,最终通过时间线让记忆永不褪色.@Appinn 来自微博的问题: 麻烦一下,想 ...

  8. 极值跟踪算法 c语言,快速约束极值子空间跟踪算法_魏志强.pdf

    快速约束极值子空间跟踪算法_魏志强 34 4 Vol. 34 No. 4 第 卷第 期 华 北 水 利 水 电 学 院 学 报 2013 8 Journal of North China Instit ...

  9. 快速幂算法(矩阵快速幂还不是很会。。日后会更新)

    PS:转载,自己写的不如人家,怕误导.转载地址:http://www.cnblogs.com/CXCXCXC/p/4641812.html 首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照 ...

最新文章

  1. 【ASP.NET】服务器控件大演练与实例分析
  2. python的断点调试
  3. 读书笔记 - 《乌合之众》
  4. 小程序实现无限瀑布流
  5. c语言中typeof关键字
  6. 用spss做哑变量--给不敲代码同学福音
  7. Java集合查找Map,Java集合框架中Map接口的使用
  8. 陆游书法真迹,堪称书法大家!
  9. TMS320F2837x + Spartan6/国产FPGA低成本高实时注塑机运动控制器软硬件设计方案
  10. 互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
  11. hdu 3987 求割边最少的最小割
  12. 教你如何一步一步制作自己的PCB个人LOGO
  13. kali源代码简单说明
  14. Am3358增加Uboot的logo显示 增加Uboot自定义命令控制LCD
  15. 2023移动光猫H2-2超级密码获取教程(可改桥接)
  16. spring hateoas初体验
  17. 公司网站建设的几点建议—竹晨网络
  18. 变量的基本使用Day2
  19. 天气选择页面html,CSS3 天气预报界面组件
  20. wms系统对仓库进行集中管理

热门文章

  1. python面向对象基础-01
  2. ppt to html c,PPTC参数.pdf
  3. 计算机应用知识试题 上学吧,自考计算机应用高分技巧,自考计算机应用作答技巧...
  4. shell子串截取的三种用法:
  5. vue-router路由防卫
  6. F-Measure MCC ROC Area PRC Area_2021国考报名入口:http://zw.offcn.com/gj/?area=gdamp;scode=ljx19564...
  7. Audified U73b 复古压缩器评测:带来复古温暖的色彩
  8. css3八卦,CSS3 阴阳八卦(太极)图动画
  9. mysql存储指纹,mysql - ZKTeco 4500指纹验证 - 堆栈内存溢出
  10. 码码在线考勤系统笔记(三)