动态规划问题2
来源:互联网 发布:用户mac地址绑定错误 编辑:程序博客网 时间:2024/05/18 03:56
详细说明请参阅前一篇博文,有算法的详细步骤,本篇博文只给出核心思想与代码:
问题一:
给定某个数n,从1开始,每步只能增加1,或2倍增加,求到n的最小步数,比如
到10的最小步数是 2 4 5 10 共4步。
1,拆分问题:求n的最小步数,化成求n-1的最小步数。
2,数据结构dp(n)表示从1到n的最小步数。
3,状态转移方程:
n为奇数:dp(n) = dp(n-1)+1,比如dp(99)=dp(98)+1
n为偶数:min[dp(n-1)+1,dp(n/2)+1],求dp(n-1)+1与dp(n/2)+1中的最小值。比如dp(100)的值为dp(99)+1与dp(50)+1中的最小值
当然这个问题最优方法是从后往前算,这样可以避免计算大量无用值,以上思路完全是从动态规划思想去考虑的。
问题二:
array为棋盘矩阵,棋子array[0][0]走到array[i][j]的最短距离,棋子方向只能向下或向右。
1,数据结构:dp(i,j)表示到第i行第j列的最短距离array为棋盘矩阵,棋子array[0][0]走到array[i][j]的最短距离,棋子方向只能向下或向右。
2,状态转移方程:
1)dp(0,j)与dp(i,0)的值为array边的相加
2)除去dp(0,j)与dp(i,0)的情况,min[dp(i-1,j),dp(i,j-1)] + array(i,j),比如求dp(2,2),dp(2,2)的值只能从dp(1,2)与dp(2,1)处求得,因为棋子方向只能向下或向右,因此求dp(1,2)与dp(2,1)的最小值,最后再加上array[2][2]。即为dp(2,2)的值。
- 动态规划问题2
- 动态规划问题2
- 动态规划2:台阶问题
- 动态规划----贪心的动态规划问题
- 整数划分问题解法2-动态规划
- 整数划分问题解法2-动态规划
- 动态规划(2)01背包问题
- java 动态规划问题(2)
- 动态规划-整数划分问题(2)
- 动态规划--01背包问题(2)
- 动态规划-试题(2)-背包问题
- 动态规划问题
- 动态规划问题
- 动态规划回文问题
- 动态规划 背包问题
- 【动态规划】背包问题
- 动态规划问题
- 动态规划问题
- AForge MultiCamera
- NetFlow学习总结
- VIN码识别:扫一扫,快速录入VIN码
- 动态规划之沙子合并
- Javaweb服务端开发学习(一)--开发环境的配置
- 动态规划问题2
- C++PAT查验身份验证
- linux进程间通信之共享内存
- 考察的是js的预解析
- Ecliose导文件
- handsontable日期控件汉化
- unity3d相关文档整理
- 【ECMAScript6标准入门】2.const的使用
- Lua之Sprite使用