题目:

4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过, 4个人的过桥速度分别为1分钟、2分钟、5分钟、10分钟,试问最少需要多长时间4人才可以全部通过小桥?

抽象:

N个人过桥,每个人过桥需要的时间为ti(1<=i<=N).每次最多两个人过桥,并且还要回来一个。求最快过桥时间。

输入:每人过桥时间数组,人数(数组元素个数)。

输出:最快时间。

解析:

最佳方案构造:以下是构造N个人(N≥1)过桥最佳方案的方法:  
1) 如果N=1、2,所有人直接过桥。  
2) 如果N=3,由最快的人往返一次把其他两人送过河。  
3) 如果N≥4,设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;
 而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。那么    
 当2b>a+y时,使用模式一将Z和Y移动过桥;    
 当2b<a+y时,使用模式二将Z和Y移动过桥;    
 当2b=a+y时,使用模式一将Z和Y移动过桥。
这样就使问题转变为N-2个旅行者的情形,从而递归解决之。
     ……         
    A Z →          
    A ←          
    ……
也就是“由A护送到对岸,A返回”,称作“模式一”。

……          
    ……  
第n-2步:   A B →   
第n-1步:    A ←    
第n步:     Y Z →  
第n+1步:    B ←          
    ……
这个模式是“由A和B护送到对岸,A和B返回”,称作“模式二”。


代码:

#include <vector> int TravelBridge(std::vector<int> times) { // 假设时间数组已经排序 size_t length = times.size(); if(length <= 2) return times[length-1]; else if(length == 3) { return times[0] + times[1] + times[2]; } else { int totaltime = 0; int a = times[0]; int b = times[1]; int z = times[length-1]; int y = times[length-2]; if(b*2 < a + y) { times.erase(times.end()-1); times.erase(times.end()-1); totaltime += b + a + z + b + TravelBridge(times); } else { times.erase(times.end()-1); totaltime += z + a + TravelBridge(times); } return totaltime; } }

算法题21 最快过桥问题相关推荐

  1. python算法题排序_python-数据结构与算法- 面试常考排序算法题-快排-冒泡-堆排-二分-选择等...

    算法可视化网站推荐---->visualgo 0.面试题中的排序算法 一些排序算法可能在工作中用的会比较少,但是面试却是不得不面对的问题.算法有助于提高我们对数据结构的理解以及提高自己的逻辑能力 ...

  2. 写一个算法交换单链表中p所指结点与其后继结点-21算法题

    本题为算法题,交换的是结点,而不是结点的值 注意题目是交换结点,不是交换结点的值. 设q为1,p为2,r为3,r->next为4.原来为1234 1指向3,2指向4,3指向2.最终顺序为1324 ...

  3. 学习笔记之15道简单算法题

    15道简单算法题 http://www.cnblogs.com/hlxs/archive/2014/06/06/3772333.html (●-●) | 剑指Offer_编程题_牛客网 http:// ...

  4. Python算法题笔记

    Python算法题笔记 这是本人在学Python和算法题时做的笔记,包含一些Python的典型写法,有用的轮子调用,希望对大家有帮助. 分为三个部分,Python笔记,算法,经典题目,其中Python ...

  5. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  6. LeetCode算法题

    算法题 1.剑指offer 68题:https://www.nowcoder.com/discuss/198840source_id=profile_create_nctrack&channe ...

  7. 【精选】JAVA入门算法题(四)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:全排列问题 这种问题在算法题中应用很多,主要思路是使用递归来求,求n个数的全排列就是把第一个数固定后求n-1个数的全排列,不断递归到 ...

  8. 字节跳动2021年4月面试算法题库

    本文汇总了牛客2021.4.1~2021.4.30 面经考到的Leetcode题目 最终的高频题榜单数据可以在CodeTop题库(https://codetop.cc)查询,支持按部门.岗位分类筛选. ...

  9. 字节跳动3月面试遇到的高频算法题

    本文汇总了牛客2021.3.1~2021.3.30 面经考到的Leetcode题目 最终的高频题榜单数据可以在CodeTop题库(https://codetop.cc)查询,支持按部门.岗位分类筛选. ...

最新文章

  1. 7-7 12-24小时制 (C语言)
  2. 博客会暂时停止一段时间
  3. [MAC] Mac OS X下快速复制文件路径的方法
  4. 深入浅出python机器学习_6.3.1_随机森林实例——要不要和相亲对象进一步发展
  5. ecshop 2.7.x 去版权 lengze.com
  6. 在centos中安装samba 服务
  7. Android开发实践:Java层与Jni层的数组传递
  8. wow mysql dbc_WoW的DBC文件内容描述-魔兽有爱论坛 - 一个魔兽世界爱好者的聚集地 uiwow.com - Powered by Discuz!...
  9. c语言 枚举大小写,C语言枚举类型(Enum)深入理解
  10. 修改毕设,降低查重率方法
  11. win10系统下360加速球不显示网速解决方法
  12. Unity如何查看当前内存使用情况
  13. 其实苹果没啥黑科技,只是公司大一点
  14. 面试必杀技:异步FIFO
  15. ubuntu18.04(Jetson)以及火狐浏览器设置终端代理和清除代理命令
  16. 以后给孩子起名字不用发愁了
  17. 颜色恒常性CVPR2020 Multi-Domain Learning for Accurate and Few-Shot Color Constancy阅读笔记
  18. stranded 和 non-stranded RNA-seq
  19. 如何帮助中国8000万中小企业上云?阿里云交出了这样的答卷
  20. OSPF(HCNA)——OSPF协议详解

热门文章

  1. cudnn 版本查看
  2. 实时油价接口 按城市检索加油站
  3. 最值得公司经理学习的创业七大原则--献给从“小公司”转为“大公司”的企业
  4. 在Springboot中使用pagehelper实现分页管理
  5. Qt安装及配置资源链接
  6. 2019牛客暑期多校训练营(第九场)Quadratic equation(二次剩余
  7. 统计学习方法第三章 k近邻法
  8. C语言 二分法查找与递归二分法查找
  9. 前端实现图片或者视频下载 vue
  10. 梦幻手游服务器总维护,梦幻西游手游7.13维护解读 维护内容详细分析