算法题21 最快过桥问题
题目:
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 最快过桥问题相关推荐
- python算法题排序_python-数据结构与算法- 面试常考排序算法题-快排-冒泡-堆排-二分-选择等...
算法可视化网站推荐---->visualgo 0.面试题中的排序算法 一些排序算法可能在工作中用的会比较少,但是面试却是不得不面对的问题.算法有助于提高我们对数据结构的理解以及提高自己的逻辑能力 ...
- 写一个算法交换单链表中p所指结点与其后继结点-21算法题
本题为算法题,交换的是结点,而不是结点的值 注意题目是交换结点,不是交换结点的值. 设q为1,p为2,r为3,r->next为4.原来为1234 1指向3,2指向4,3指向2.最终顺序为1324 ...
- 学习笔记之15道简单算法题
15道简单算法题 http://www.cnblogs.com/hlxs/archive/2014/06/06/3772333.html (●-●) | 剑指Offer_编程题_牛客网 http:// ...
- Python算法题笔记
Python算法题笔记 这是本人在学Python和算法题时做的笔记,包含一些Python的典型写法,有用的轮子调用,希望对大家有帮助. 分为三个部分,Python笔记,算法,经典题目,其中Python ...
- LeetCode算法题整理(200题左右)
目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...
- LeetCode算法题
算法题 1.剑指offer 68题:https://www.nowcoder.com/discuss/198840source_id=profile_create_nctrack&channe ...
- 【精选】JAVA入门算法题(四)
把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:全排列问题 这种问题在算法题中应用很多,主要思路是使用递归来求,求n个数的全排列就是把第一个数固定后求n-1个数的全排列,不断递归到 ...
- 字节跳动2021年4月面试算法题库
本文汇总了牛客2021.4.1~2021.4.30 面经考到的Leetcode题目 最终的高频题榜单数据可以在CodeTop题库(https://codetop.cc)查询,支持按部门.岗位分类筛选. ...
- 字节跳动3月面试遇到的高频算法题
本文汇总了牛客2021.3.1~2021.3.30 面经考到的Leetcode题目 最终的高频题榜单数据可以在CodeTop题库(https://codetop.cc)查询,支持按部门.岗位分类筛选. ...
最新文章
- 7-7 12-24小时制 (C语言)
- 博客会暂时停止一段时间
- [MAC] Mac OS X下快速复制文件路径的方法
- 深入浅出python机器学习_6.3.1_随机森林实例——要不要和相亲对象进一步发展
- ecshop 2.7.x 去版权 lengze.com
- 在centos中安装samba 服务
- Android开发实践:Java层与Jni层的数组传递
- wow mysql dbc_WoW的DBC文件内容描述-魔兽有爱论坛 - 一个魔兽世界爱好者的聚集地 uiwow.com - Powered by Discuz!...
- c语言 枚举大小写,C语言枚举类型(Enum)深入理解
- 修改毕设,降低查重率方法
- win10系统下360加速球不显示网速解决方法
- Unity如何查看当前内存使用情况
- 其实苹果没啥黑科技,只是公司大一点
- 面试必杀技:异步FIFO
- ubuntu18.04(Jetson)以及火狐浏览器设置终端代理和清除代理命令
- 以后给孩子起名字不用发愁了
- 颜色恒常性CVPR2020 Multi-Domain Learning for Accurate and Few-Shot Color Constancy阅读笔记
- stranded 和 non-stranded RNA-seq
- 如何帮助中国8000万中小企业上云?阿里云交出了这样的答卷
- OSPF(HCNA)——OSPF协议详解