从矩阵左上角到右下角的最大值
来源:互联网 发布:淘宝直播微淘粉丝要求 编辑:程序博客网 时间:2024/05/29 18:18
题目:
输入一个矩阵M×N,现在从左上角到达右下角,且只能向下或者向右走。我们要求的是路径经过的所有点的数字之和的最大值。
输入输出示例:
输入数据:
第一行有两个数字M和N,表示这个矩阵有M行N列。
然后从第二行开始,有M行整数,每行都有N个非负整数。
输出数据:
所过路径的最大和。
数据范围:0<M,N<=1000,矩阵中的字数不会超过1000
示例:
输入
4 5
0 0 8 0 0
0 0 0 9 0
0 7 0 0 0
0 0 6 0 0
输出
17
分析:
方法一、采用DFS的思想
import java.util.*;public class MaxMatrixPathSum {private static int M;private static int N;private static int[][] A;public static int dfs(int i, int j) {if(i == M || j == N)return 0;else if(i == M-1 && j == N-1)return A[i][j];elsereturn max(dfs(i+1, j), dfs(i, j+1)) + A[i][j];}public static int max(int i, int j) {return i > j ? i : j;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {M = sc.nextInt();N = sc.nextInt();A = new int[M][N];for(int i = 0; i < M; i++) {for(int j = 0; j < N; j++) {A[i][j] = sc.nextInt();}}System.out.println(dfs(0, 0));}}}
方法二、采用动态规划的思想
import java.util.Scanner;public class MaxMatrixPath {public static int getMaxPathSum(int[][] nums) {if(nums == null || nums.length == 0)return 0;int M = nums.length;int N = nums[0].length;int dp[][] = new int[M][N];for(int j = 0; j < N; j++) {for(int i = 0; i < M; i++) {if(i == 0 && j == 0) {dp[i][j] = nums[i][j];continue;}if(j == 0) {dp[i][j] = dp[i-1][j] + nums[i][j];continue;}if(i == 0) {dp[i][j] = dp[i][j-1] + nums[i][j];continue;}dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]) + nums[i][j];}}return dp[M-1][N-1];}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {int M = sc.nextInt();int N = sc.nextInt();int[][] nums = new int[M][N];for(int i = 0; i < M; i++) {for(int j = 0; j < N; j++) {nums[i][j] = sc.nextInt();}}System.out.println(getMaxPathSum(nums));}sc.close();}}
阅读全文
0 0
- 从矩阵左上角到右下角的最大值
- Test1_N*N矩阵从左上角到右下角路径和的最大值
- 从左上角到右下角的带有阈值的最大值
- 二维数组--从左上角到右下角的最大值 九度
- 输出从矩阵左上角到右下角的所有路径
- 矩阵中从左上角到右下角的路径条数
- 二维数组--从左上角到右下角最大值--java
- (hdu step 3.2.8)命运(简单DP:求从左上角走到右下角的最大值)
- 计算一个矩阵从左上角到右下角和最大
- 编程-从矩阵左上角走到右下角
- 经典面试题——从矩阵的左上角到右下角有多少种方法。
- 【DP】在矩阵中,选择一条从左上角到右下角、经过数字之和最大的路径
- 动态规划求解从矩阵左上角到右下角的最大受益问题
- python实现从二维矩阵左上角到右下角的出路数寻找
- 棋盘左上角到右下角路径最大值问题
- 求矩阵左上角到右下角路径的最大价值
- 矩阵从左上角到右下角的最优路径使得经过路径上的权值和最大(最小)
- 控件从左上角移动到右下角
- 遥感影像镶嵌线生成-如何根据影像自身特点生成完整的镶嵌线网络
- css继承
- lintcode--和大于s的最小数组
- 23种设计模式(7):中介者模式
- Android 不依赖activity的全局悬浮窗实现
- 从矩阵左上角到右下角的最大值
- gensim doc2vec + sklearn kmeans 做文本聚类
- git的fetch
- 压缩字符串
- 【Java】StringUtils工具类常用方法详解
- 使用谷歌内核TChromium入门
- ACM基础题:奇偶数分离
- HTML中的排版标签
- css3基础样式 边框 阴影 字体