矩阵对角之间的走法常见问题之动态规划
来源:互联网 发布:易语言ce修改器源码 编辑:程序博客网 时间:2024/05/16 10:30
1.在N*M的棋盘上,小兵要从左下角走到右上角,只能向上或者向右走,问有多少种走法
这是最常见的入门级别的动态规划问题的求解,但是问题的变种有很多,问题二回是在此基础上的衍生问题。
F(n,m)表示棋盘大小为n*m时走法数量,F(n,m) = F(n-1,m) + F(n,m-1) if n*m > 0,otherwise F(n,m) = 1
public class DP2 {public static void main(String[] args) {int n = 5;int m = 4;System.out.println(f(n,m));}static int f(int n,int m){if(n==0||m==0)return 0;if(n==1||m==1)return 1;return f(n-1,m)+f(n,m-1);}}
2.输入一个矩阵num[m][n],现在从左上角(num[0][0])到达右下角num[m-1][n-1],且只能向下或者向右走。定义经过的所有点的数字之和为该条路径的收益,求到达右下角的最大收益。
* 用一个数组result[i][j]保存每一个点i,j的最大收益
* num[i][j], i=j=0
* result[i][j] = result[i][j-1]+num[i][j], i = 0,j!=0
* result[i-1][j]+num[i][j], j = 0,i!=0
* Max(result[i-1][j],result[i][j-1])+num[i][j], j!=0,i!=0
public static void main(String[] args) {int[][] num = {{1,2,3},{1,2,1},{0,7,5}};int[][] result = getMax(num);System.out.println(result[2][2]);}private static int[][] getMax(int[][] num) {int m = num.length;if(m==0){return new int[0][0];}int n = num[0].length;int[][] result = new int[m][n];for (int jj = 0; jj < n; jj++) {for (int ii = 0; ii < m; ii++) {if(ii==0&&jj==0){result[ii][jj] = num[ii][jj];continue;}if(jj==0){result[ii][jj] = result[ii-1][jj]+num[ii][jj];continue;}if(ii==0){result[ii][jj] = result[ii][jj-1]+num[ii][jj];continue;}int max=Math.max(result[ii][jj-1],result[ii-1][jj]);result[ii][jj] = max+num[ii][jj];}}return result;}
阅读全文
0 0
- 矩阵对角之间的走法常见问题之动态规划
- 格子走法-动态规划
- 动态规划之机器人走方格
- 动态规划之走台阶问题
- AOJ-776 马的走法 动态规划
- 走格子问题的动态规划求解
- 走台阶问题的动态规划
- 三对角矩阵压缩存储--注意对角元素的下标
- 对角矩阵
- 对角矩阵
- 动态规划应用之--矩阵的链式相乘
- 动态规划之矩阵的最小路径和
- 城市街道 网格 走法 动态规划
- 动态规划走楼梯
- 动态规划走街道
- 动态规划-走楼梯
- 动态规划---走格子
- 动态规划法压缩矩阵
- JSON对象与字符串之间的相互转换
- Matlab随机生成元素和为K的向量
- .NET漫游指南-009-泛型事件委托
- 怎么实时监控手机cpu-----使用性能监视器PerfMon
- XDOJ 1233
- 矩阵对角之间的走法常见问题之动态规划
- MINI2440裸机实验之LCD
- JavaWeb监控框架-JavaMelody
- 内容提供者——添加内容观察者
- Coursra-MachineLearning 第二次作业总结
- OpenCV-利用cvPtr2D存取矩阵元素和用cvGetReal2D取矩阵元素
- format函数
- [LeetCode]295. Find Median from Data Stream
- <input>标签用val()取不到值