题目由于与同学文章重复无法上传。
题目详情:蓝桥杯第二次模拟第10题
思路:遍历数组,然后寻找前面能到当前点的所有可能,将其中最大的权值赋值给当前点。
代码如下:
import java.util.Scanner;
public class test10 {
static int[] dx = { 0, 0, 0, -1, -1, -1, -2, -2, -3 };//表示当前点能回去的位置
static int[] dy = { -1, -2, -3, 0, -1, -2, 0, -1, 0 };
static long[][] data;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
data = new long[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
data[i][j] = sc.nextInt();
}
}
op();
System.out.println(data[n - 1][m - 1]);
sc.close();
}
private static void op() {
int n = data.length;
int m = data[0].length;
for (int x = 0; x < n; x++) {//遍历二维数组
for (int y = 0; y < m; y++) {
long max = Long.MIN_VALUE;//用来存储最大值
if (x == 0 && y == 0) {//第一个点无可回退的点
continue;
}
for (int i = 0; i < 9; i++) {//每个点都将能回去的点遍历到
int _x = x + dx[i];
int _y = y + dy[i];
if (_x >= 0 && _x < n && _y >= 0 && _y < m) {
long target=data[x][y]+data[_x][_y];//target表示当前点加回退的点的权值
if(target>max) {
max=target;
}
}
}
data[x][y] = max;//将所有可以回退的点的最大值赋值给当前点
}
}
}
}
本人菜鸟一枚,恳请大佬指出不足。