import java.util.Scanner;
public class practice03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int wide = sc.nextInt();
int[][] arr = new int[length][wide];
for (int i = 0; i < length; i++) {
for (int j = 0; j < wide; j++) {
arr[i][j] = sc.nextInt();
}
}
// 定义状态:dp[i][j] 表示从点(1,1)到点(i,j)的最大权值
int[][] dp = new int[length][wide];
// 规定九个位置的横纵坐标
int[] x = {0, 0, 0, -1, -1, -1, -2, -2, -3};
int[] y = {-1, -2, -3, 0, -1, -2, 0, -1, 0};
for (int i = 0; i < length; i++) {
for (int j = 0; j < wide; j++) {
if (i == 0 && j == 0) {
// 初始化
dp[i][j] = arr[0][0];
} else {
for (int k = 0; k < 9; k++) {
// 搜索
int lastX = i + x[k];
int lastY = j + y[k];
if (lastX >= 0 && lastX < length && lastY >= 0 && lastY < wide) {
dp[i][j] = Math.max(dp[i][j], dp[lastX][lastY] + arr[i][j]);
}
}
}
}
}
System.out.println(dp[length - 1][wide - 1]);
}
}
蓝桥杯-跳跃问题
最新推荐文章于 2024-09-27 00:45:01 发布
该程序使用Java编写,通过Scanner类获取输入,创建二维数组并填充数据。然后利用动态规划方法计算从点(1,1)到数组最后一格的最大权值路径。程序定义了九种可能的移动方向,并在每个位置更新最大值。最后输出结果。
摘要由CSDN通过智能技术生成