
区间dp问题,思路源自灵神题解
java
class Solution {
public int minCost(int n, int[] cuts) {
int[] newCuts = new int[cuts.length + 2];
newCuts[cuts.length + 1] = n;
System.arraycopy(cuts, 0, newCuts, 1, cuts.length);
Arrays.sort(newCuts);//题目给的[5,6,1,4,2]是无序的,但是计算newCuts[j]-newCuts[i]时需要保证数组有序
int[][] dp = new int[newCuts.length][newCuts.length];
for (int i = newCuts.length - 3; i >= 0; i--) {
for (int j = i + 2; j < newCuts.length; j++) {
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];
}
}