题目:在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。

输入:

两行数据:第一行为小朋友个数n

第二行有n个数,用空格隔开,分别是每个小朋友过桥的时间。

输出:

一行数据:所有小朋友过桥花费的最少时间。

样例:

输入

4

1 2  5 10

输出

17

解题思路:

我们先将所有人按花费时间递增进行排序,假设前i个人过河花费的最少时间为opt[i],那么考虑前i-1个人过河的情况,即河这边还有1个人,河那边有i-1个人,并且这时候手电筒肯定在对岸,所以opt[i] = opt[i-1] + a[1] + a[i]        (让花费时间最少的人把手电筒送过来,然后和第i个人一起过河)
如果河这边还有两个人,一个是第i号,另外一个无所谓,河那边有i-2个人,并且手电筒肯定在对岸,所以opt[i] = opt[i-2] + a[1] + a[i] + 2*a[2]    (让花费时间最少的人把电筒送过来,然后第i个人和另外一个人一起过河,由于花费时间最少的人在这边,所以下一次送手电筒过来的一定是花费次少的,送过来后花费最少的和花费次少的一起过河,解决问题)
所以 opt[i] = min{opt[i-1] + a[1] + a[i] , opt[i-2] + a[1] + a[i] + 2*a[2] }

来看一组数据 四个人过桥花费的时间分别为 1 2 5 10

具体步骤是这样的:
第一步:1和2过去,花费时间2,然后1回来(花费时间1);
第二歩:3和4过去,花费时间10,然后2回来(花费时间2);
第三部:1和2过去,花费时间2,总耗时17。

代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;int main()
{int n;cin>>n;int *t = new int[n];for (int i=0;i<n;i++){cin>>t[i];}sort(t,t+n);vector<int> vect(n);vect[0]=0;vect[1]=t[1];for (int i=2;i<n;i++){vect[i] = min(vect[i-1]+t[0]+t[i],vect[i-2]+t[0]+t[i]+2*t[1]);}cout<<vect[n-1];return 0;
}

算法:动态规划——线性模型之小朋友过桥相关推荐

  1. 【题目】动态规划:小朋友过桥问题

    在一个夜黑风高的晚上,有n(n<=50)个小朋友在桥的一边,由于桥很窄,每次只允许不大于2人通过.他们只有一个手电筒,所以每次过桥的两人需要把手电筒再带回来. i 号小朋友过桥的时间为T[i], ...

  2. 算法设计与分析作业:小朋友过桥问题(蓝桥杯)

    在一个夜黑风高的晚上,有 nn 个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不超过两人通过,他们只有一个手电筒,所以每次过桥后,需要有人把手电筒带回来,第 ii 号小朋友过桥的时间 ...

  3. 算法-动态规划 Dynamic Programming--从菜鸟到老鸟

    前言 最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic Programming)算法的题目很多.相对于我来说,算法里面遇到的问题里面感觉最难的也就是动态规划(Dynamic Prog ...

  4. R语言构建xgboost模型:使用xgboost构建广义线性模型(GLM):使用gblinear算法拟合线性模型并配置L1和L2正则化

    R语言构建xgboost模型:使用xgboost构建广义线性模型(GLM):使用gblinear算法拟合线性模型并配置L1和L2正则化 目录

  5. 计算机算法的发展动态,计算机算法动态规划讲解.ppt

    计算机算法动态规划讲解 * 0-1背包问题 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,-,n时0-1背包问题的最优值.由0-1背包问题 ...

  6. 漫画说算法--动态规划算法三(绝对通俗易懂,非常棒)

    在前两集漫画中,我们通过一个算法问题的完整解题过程,讲述了动态规划的基本概念和思想.没看过前两集的朋友可以点击下面的链接: 漫画说算法–动态规划算法一(绝对通俗易懂,非常棒) 漫画说算法–动态规划算法 ...

  7. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  8. 算法-动态规划2图问题-TSP问题

    算法-动态规划2-TSP问题 问题: 旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 设s, s1, s2, -, sp, s是从s出发的一条路径长度最短的 ...

  9. 算法-动态规划2图问题-多段图的最短路径问题

    算法-动态规划2-多段图的最短路径问题 多段图的最短路径问题 问题:设图G=(V,E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi(2<=k<=n,1<=i< ...

最新文章

  1. 关于SurfaceView相机预览获取Bitmap的方法
  2. JMeter性能测试,验证请求数据的准确性(wc命令)
  3. mysql db compare_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试
  4. Apache构建web主机、日志分割及AWStats分析系统
  5. 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结
  6. 剑指offer之分行从上到下打印二叉树
  7. iStream DDS
  8. mysql 怎么修改成新字段_Mysql入门第一课《建表、改表、删表》
  9. wampserver的下载与安装配置
  10. C++ 创建 TcpClient 客户端,使用QAbstractSocket 、 QtNetwork
  11. [AI-Steering编程]九.路径跟随
  12. 零基础如何从零开始运营微信公众号
  13. 【信号与系统学习笔记】—— 【周期信号的傅里叶级数表示】之 周期信号傅里叶级数的性质解读
  14. 计算机网络安全技术文献综述,计算机网络安全防护技术研究总结与参考文献
  15. 超详细版-计算网络地址、子网、广播地址、主机数
  16. Python | 打印三角形图案(educoder)
  17. 谷歌seo外链预算方案,影响谷歌反向链接成本的因素
  18. 笑话理解之Devil
  19. WML语言基础(WAP建站)二
  20. 最简单windows7 硬盘安装工具 nt6 hdd installer v2.8.1,图文、原理

热门文章

  1. 为什么要用NAS网络存储服务器
  2. 测试如何与开发人员进行沟通
  3. 阿里云配置负载均衡以及遇到的问题
  4. ubuntu18美化(完整版)
  5. MM买裤子杀价的全过程
  6. ssd(Single Shot MultiBox Detector)解读之(一)原理解析
  7. 生活随记 - 2020年 人生没了来处只剩下了归途
  8. LeetCode刷题笔记 二叉树 二叉搜索树的操作
  9. 技术丨小团队的微服务之路
  10. scilab安装EMD工具箱