Monkbananas solution
Running the code online
https://onecompiler.com/java/3ydebnpw8
Java Code
import static java.lang.Math.max;
import static java.lang.Math.min;
public class Main {
public static void main(String[] args) {
int[][] mat = {
{1, 3, 3},
{2, 1, 4},
{0, 6, 4}
};
assert maxForwardPathSum(mat) == 13;
int[][] mat2 = {
{1, 3, 1, 5},
{2, 2, 4, 1},
{5, 0, 2, 3},
{0, 6, 1, 2}
};
assert maxForwardPathSum(mat2) == 16;
int[][] mat3 = {
{10, 33, 13, 15},
{22, 21, 4, 1},
{5, 0, 2, 3},
{0, 6, 14, 2}
};
assert maxForwardPathSum(mat3) == 83;
}
/*
Time Complexity: O(N*M)
Space Complexity: O(N*M)
*/
public static int maxForwardPathSum(int[][] mat) {
int n = mat.length;
int m = mat[0].length;
int maxSum = Integer.MIN_VALUE;
for (int c = 1; c < m; c++)
for (int r = 0; r < n; r++) {
mat[r][c] += max(mat[r][c - 1],
max(mat[max(0, r - 1)][c - 1],
mat[min(n - 1, r + 1)][c - 1]));
maxSum = max(mat[r][c], maxSum);
}
return maxSum;
}