免费咨询热线
13621929115动态规划算法的核心就是记住已经解决过的子问题的解记住求解的方式有两种:①自顶向下的备忘录法②自底向上动态规划的经典模型线性模型线性模型的是动态规划中最常用的模型,上文讲到的钢条切割问题就是经典的线性模型,这里的线性指的是状态的排布是呈线性的。
【例题1】是一个经典的面试题,我们将它作为线性模型的敲门砖上海模型厂家【例题1】在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。
问所有小朋友过桥的总时间最短是多少
每次上海模型厂家过桥的时候最多两个人,如果桥这边还有人,那么还得回来一个人(送手电筒),也就是说N个人过桥的次数为2*N-3(倒推,当桥这边只剩两个人时只需要一次,三个人的情况为来回一次后加上两个人的情况…)有一个人需要来回跑,将手电筒送回来(也许不是同一个人,realy?!)这个回来的时间是没办法省去的,并且回来上海模型厂家的次数也是确定的,为N-2,如果是我,我会选择让跑的最快的人来干这件事情,但是我错了…如果总是跑得最快的人跑回来的话,那么他在每次别人过桥的时候一定得跟过去,于是就变成就是很简单的问题了,花费的总时间:。
T = minPTime * (N-2) + (totalSum-minPTime)来看一组数据上海模型厂家 四个人过桥花费的时间分别为 1 2 5 10,按照上面的公式答案是19,但是实际答案应该是17具体步骤是这样的:。
第一步:1和2过去,花费时间2,然后1回来(花费时间1);第二歩:3和4过去,花费时间10,然后2回来(花费时间2);第三部:1和2过去,花费时间2,总耗时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] }区间模型区间模型的状态表示一般为d[i][j],表示区间[i, j]上海模型厂家上的最优解,然后通过状态转移计算出[i+1, j]或者[i, j+1]上的最优解,逐步扩大区间的范围,最终求得[1, len]的最优解。
【例题2】给定一个长度为n(n j-1时也是有意义的,它代表的是空串,空串也是一个回文串,所以这种情况下d[i+1][j-1] = 0);当A[i] != A[j]上海模型厂家时,我们将它变成更小的子问题求解,我们有两种决策:。
1、在A[j]后面添加一个字符A[i];2、在A[i]前面添加一个字符A[j];根据两种决策列出状态转移方程为:d[i][j] = min{ d[i+1][j], d[i][j-1] } + 1; (每次状态转移,区间长度增加1)
空间复杂度O(n^上海模型厂家2),时间复杂度O(n^2), 下文会提到将空间复杂度降为O(n)的优化算法背包模型背包问题是动态规划中一个最典型的问题之一由于网上有非常详尽的背包讲解,这里只将常用部分抽出来【例题3】
有N种物品(每种物品1件)和一个容量为V的背包放入第 i 种物品耗费的空间是Ci,得到的价值是Wi求解将哪些物品装上海模型厂家入背包可使价值总和最大f[i][v]表示前i种物品恰好放入一个容量为v的背包可以获得的最大价值。
决策为第i个物品在前i-1个物品放置完毕后,是选择放还是不放,状态转移方程为:f[i][v] = max{ f[i-1][v], f[i-1][v – Ci] +Wi }时间复杂度O(VN),空间复杂度O上海模型厂家(VN) (空间复杂度可利用滚动数组进行优化达到O(V) )。
Copyright © 2002-2020 上海润之模型设计有限公司 版权所有 展示模型,展品模型,展厅模型,展示道具,展厅展品,展品道具,模型定制,模型公司,上海模型公司 备案号:沪ICP备20018260号