Maximum Number of Points with Cost

给一个数组, 求如何取到最大值, 取得方法是从每行取一个,但是距离上一行取的时候要减去格子的距离。

这题就dp。。。

class Solution {
    public long maxPoints(int[][] points) {
        int n = points.length;
        int m = points[0].length;
        long[][] dp = new long[n][m];
        long res = 0;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                long tmp = 0;
                for(int k = 0; k < m; k++) {  
                    if(i == 0)
                    {
                        tmp = points[i][j];
                        break;
                    }
                    else
                    {
                        tmp = Math.max(tmp, points[i][j] + dp[i - 1][k]- Math.abs(k - j));
                    }
                }
                dp[i][j] = tmp;
                res = Math.max(res, dp[i][j]);
            }
        }  
        return res;
    }
}