leetcode1547.切棍子的最小成本

区间dp问题,思路源自灵神题解
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];}
}
