【发布时间】:2026-01-22 13:00:01
【问题描述】:
我有一个二维数组,我需要找到 left bottom 可以收集的最大总和路径,并且只能从顶部和右侧移动直到结束。我在 Java 上做过(任务非常类似于 Project Euler: Problem 81):
static int maxSumPath(int[][] data) {
final int length = data.length;
final int[][] sumArr = new int[length][length];
for (int row = length - 1; row >= 0; row--) {
for (int col = 0; col < length; col++) {
if (row == length - 1 && col == 0) {
sumArr[row][col] = data[row][col];
} else if (row == length - 1) {
sumArr[row][col] = sumArr[row][col - 1] + data[row][col];
} else if (col == 0) {
sumArr[row][col] = sumArr[row + 1][col] + data[row][col];
} else {
sumArr[row][col] = Math.max(sumArr[row][col - 1], sumArr[row + 1][col]) + data[row][col];
}
}
}
return sumArr[0][length - 1];
}
例子
3、0、2
2, 0, 0
0, 3, 0
结果7。
但现在我需要实现机会将该数组的任何值加倍以获得更好的分数,我只能这样做两次,并且只能将某个值加倍。
示例(在此矩阵中带有* 的数字必须加倍)
3*、0、2
2*, 0, 0
0*, 3, 0
结果12。
【问题讨论】:
-
第一部分看起来像缝雕,有一些限制,即向上和向右。在接缝雕刻中,您正在使用动态编程创建能量阵列。第二部分是选择前2个值并将它们加倍(我误解了这部分吗?)
-
@smttsp 第二部分是选择2个最大值,同时通过最大和路径并将它们加倍
-
你能提供另一个例子吗,你的数组可以是 3x3 或者可以是任何 nxm?
-
@YCF_L 问题是写方阵算法
标签: java arrays algorithm multidimensional-array