• [编程题] nk: [矩阵的最小路径和]


    [编程题] nk: 矩阵的最小路径和

    题目

    image-20200728114243102

    输入输出

    image-20200728114417130

    image-20200728114437888

    Java代码(动态规划)

    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[][] arr = new int[n][m];
            for(int i=0;i<n;i++){
                for(int j = 0;j<m;j++){
                    arr[i][j] = sc.nextInt();
                }
            }
            System.out.println(step(arr));
        }
    
        public static int step(int[][] arr){
            //保存结果的dp
            int[][] dp = new int[arr.length][arr[0].length];
            dp[0][0] = arr[0][0];  //存储左上角节点
    
            //存储第1列的值(第一列的值每个元素要想要得到最小值只能是该元素的左边和上边的元素和,左边越界了,只能是上边的)
            for(int i=1;i<arr.length;i++){
                dp[i][0] = dp[i-1][0] + arr[i][0];   //该元素的上一个元素加上这个元素的和存储dp该元素位置
            }
    
            //存储第1行的值(原理如上)
            for(int i=1;i<arr[0].length;i++){
                dp[0][i] = dp[0][i-1]+arr[0][i];
            }
    
            //存储其他结果到dp中
            for(int i=1;i<arr.length;i++){
                for(int j=1;j<arr[i].length;j++){
                    dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + arr[i][j];
                }
            }
            //返回值
            return dp[dp.length-1][dp[0].length-1];
        }
    }
    
  • 相关阅读:
    2018-10-25 模拟测试题解
    bzoj1218 [HNOI2003]激光炸弹题解
    poj1958 Strange Towers of Hanoi 题解
    NOIP2018游记
    6-序列公共用法:索引和切片
    5-编码格式
    4-格式化
    3-课后习题记录-就放这里了
    2-条件语句和循环语句
    1-基本数据类型的操作
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13390275.html
Copyright © 2020-2023  润新知