Java - Extended Brute Force Solution
\nclass Solution {\n    private Integer dp[][];\n    public int maxScore(List<List<Integer>> grid) {\n        int row = grid.size();\n        int col = grid.get
```\nclass Solution {\n    private Integer dp[][];\n    public int maxScore(List<List<Integer>> grid) {\n        int row = grid.size();\n        int col = grid.get(0).size();\n        dp = new Integer[row][col];\n\n        int max = Integer.MIN_VALUE;\n\n        for (int i = 0; i < row; i++) {\n            for (int j = 0; j < col; j++) {\n                int maxR = getMax(grid, i, j + 1);\n                int maxD = getMax(grid, i + 1, j);\n                int current = grid.get(i).get(j);\n\n                max = Math.max(max, Math.max(maxR - current, maxD - current));\n            }\n        }\n\n        return max;\n    }\n    \n    private int getMax(List<List<Integer>> grid, int row, int col) {\n        if (row >= grid.size() || col >= grid.get(row).size()) {\n            return (int) -(1e6);\n        }\n\n        if (dp[row][col] != null) {\n            return dp[row][col];\n        }\n        \n        int moveRight = getMax(grid, row, col + 1);\n        int moveDown = getMax(grid, row + 1, col);\n        int current = grid.get(row).get(col);\n        \n        return dp[row][col] = Math.max(current, Math.max(moveRight,moveDown));\n    }\n    \n}\n```
['Recursion', 'Memoization', 'Java']