LeetCode 1547. Minimum Cost to Cut a Stick

dp[i][j] 代表从第i个点到第j个点的尺子段被切断需要的最小cost

从小到大枚举i到j的长度

class Solution {
    public int minCost(int n, int[] cuts) {
        int[] newCuts = new int[cuts.length + 2];
        newCuts[0] = 0;
        for(int i=0;i<cuts.length;i++){
            newCuts[i+1] = cuts[i];
        }
        newCuts[cuts.length + 1] = n;
        Arrays.sort(newCuts);
        int[][] dp = new int[newCuts.length][newCuts.length];
        for(int len=2;len<newCuts.length;len++){
            for(int i=0;i+len<newCuts.length;i++){
                int j = i + len;
                dp[i][j] = Integer.MAX_VALUE;
                for(int k=i+1;k<j;k++){
                    dp[i][j] = Math.min(dp[i][j],dp[i][k]+dp[k][j]+newCuts[j]-newCuts[i]);
                }
            }
        }
        return dp[0][newCuts.length-1];

    }
}

猜你喜欢

转载自blog.csdn.net/Dale_zero/article/details/120561890