import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
int[][] arr = new int[n][m];
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
arr[i][j] = scan.nextInt();
}
}
int[][] dp = new int[n][m];
//九个位置的横纵坐标
int[] x = {0,0,0,-1,-1,-1,-2,-2,-3};
int[] y = {-1,-2,-3,0,-1,-2,0,-1,0};
for(int a= 0;a<n;a++){
for(int b = 0;b<m;b++){
if(a == 0 && b == 0){
dp[a][b] = arr[0][0];
}else{
for(int k = 0;k<9;k++){
int lastX = a + x[k];
int lastY = b + y[k];
if (lastX >= 0 && lastX < n && lastY >= 0 && lastY < m) {
dp[a][b] = Math.max(dp[a][b], dp[lastX][lastY] + arr[a][b]);
}
}
}
}
}
System.out.println(dp[n - 1][m - 1]);
}
}自己写的时候没有写出来,看来别人的
收获:没有思路的时候可以画画,找找规律,要有逆向思维
该代码使用Java的Scanner类读取输入,创建二维数组,然后应用动态规划策略计算矩阵中某个点的最大路径和。通过遍历矩阵并考虑九个相邻位置,更新每个位置的最大值。最终输出右下角的值,即整个矩阵的最大路径和。
8823

被折叠的 条评论
为什么被折叠?



