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];
}
}