动态规划-小朋友过桥问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014113686/article/details/82464635

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

解题思路:

方案一、耗时最少的人作为传递,即使用贪心法:每次都由耗时最少的人陪同过河,同时将电筒返回

T(n) = T(n-1)+cost[n] + cost[1]

方案二、耗时最少的两人作为传递:目的将耗时最大两人先送到对岸

T(n) = T(n-2)+cost[n] + cost[1]+2cost[2]

过程:

扫描二维码关注公众号,回复: 4447218 查看本文章

由此可知:

问题T(n)可以分解为T(n-1)和T(n-2)的子问题,然后求这两个子问题中的最优解则为T(n)的最优解:

解决方案:

获取输入值并进行排序处理:

1、简单递归

2、备忘录方式

从简单递归中可以看到会有很多重复计算,使用备忘录方式去除重复计算部分

3、自底向上的方式

显示结果:

猜你喜欢

转载自blog.csdn.net/u014113686/article/details/82464635