Interval DP on positions
Time O(m³) for m cuts Space O(m²)dp[i][j] = (c[j] − c[i]) + min over i < k < j of dp[i][k] + dp[k][j]; 0 when no cut lies between.
import java.util.Arrays;
class Solution {
public int minCost(int n, int[] cuts) {
int m = cuts.length + 2;
int[] c = new int[m];
c[0] = 0;
c[m - 1] = n;
int[] sorted = cuts.clone();
Arrays.sort(sorted);
for (int i = 0; i < sorted.length; i++) c[i + 1] = sorted[i];
int[][] dp = new int[m][m];
for (int gap = 2; gap < m; gap++)
for (int i = 0; i + gap < m; i++) {
int j = i + gap;
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]);
dp[i][j] += c[j] - c[i];
}
return dp[0][m - 1];
}
}Verdict: Independent of n.