2D数组中的java最大求和路径+两个值以获得更好的分数
我有一个2d数组,我需要找到可以由左下角收集的最大和路径,并且只能从上到右,直到到达终点。我在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
但现在我需要实现opportunity,将该数组的任何值加倍,以获得更好的分数,我只能执行两次,并且只能将特定值加倍一次
示例(在此矩阵中,带*
的数字必须加倍)
3*, 0, 2
2*, 0, 0
0*, 3, 0
结果12
# 1 楼答案
您可以通过向二维阵列中添加第三维来解决此问题,其中正好有三层:
该算法是对已有算法的简单扩展,只是现在需要在
if
条件的每个分支中设置三个部分和以下是根据上述修改的代码:
Demo