动态规划具备两个重要性质:最优子结构性质和子问题重叠性质。设计动态规划算法首先需要刻画最优子结构,即问题的最优解包含其子问题的最优解。在采用自顶向下解决问题时,有些子问题被重复计算多次,动态规划利用了此重叠性质,对每个问题只解一次,从而获得较高的解题效率。
编程题1:从最左边开始,计算出从字符串起始位置到每一个位置的最长单调递增子序列的长度。如果后者比前者大,并且前者递增数组的长度+1大于后者递增数组的长度,则满足条件。
maxlen[k]=1 (i=1)
maxlen[k]=(max(maxlen[i]:1<=i<k&&k!=0) (k>1)
若以上条件均不满足,maxlen[k]=1
编程题2:采用动态规划的思想,从下到上的方向每次将能够直接达到终点的情况数据计算出来,并且互相比较将最小值保存到该行的最后一个元素值,依次做这样子的处理,则最后的最优值保存在第一行的最后一个元素位置上。
定义f[i][j]为站点i到站点j的最少租金
f[i][j] = min { f[i][k] + f[k][j] }
其中 i<k<j, 0<=i,j<=n-1
则最少租金为 f[0][n-1]
我的队友非常厉害经常帮助我答疑解惑,虽然我很菜但还是体会到了自己在进步,希望能更熟练地将知识运用起来。
原文:https://www.cnblogs.com/imweili/p/9944348.html