过河问题(DP)

試著忘記壹切 提交于 2020-02-19 07:23:45

今天遇到了过河问题 觉得挺有趣
在这里记录一下
题意n个人过桥 需要手电照明 一次最多过俩人 速度取决于俩人最慢的那个
求最短时间
首先sort一下 储存每个人速度的数组num 从小到大排
我们求最优解过河有两种策略
1 最快的带领每个人过 最快的再回来 -----回手电速度最快
2 最快和次快先过去 最快回来 最慢和次慢一起过去 次快回来 —效率高
假设为 1 2 n n-1
则上述两种过程实现为
1----去n 回来1 去n-1 回来1-------sum=(n) +(n-1)+(2)+(1)
2----去2 回来1 去n 回来2------sum=(n)+2(2)+1
但是这两种情况都不是最优解 实际与数值大小有关
所以就是动态规划了 逐步寻找最小最优解 合并

稍加思索可以得到下列式子
n==1-----F[1]=num[1]
n==2-----F[2]=num[2]
n==3-----F[3]=num[1]+num[2]+num[3]
同时我们注意到上述两种操作的区别在于 最后两个人是一起走还是被1带着分别走
所以只需要在这两个子问题进行转换
n>=4-----F[n]=min(F[n-2]+num[1]+num[n]+2num[2],F[n-1]+num[1]+num[n]

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!