Sandomhet

Interval DP

DP for merging intervals with a cost function.

Wed, Jul 17, 2024 1 min read

Interval DP

Setup:

  • Input: nn items. Merging subintervals [i,k][i, k] and [k+1,j][k+1, j] incurs a cost of cost(i,k,j)cost(i, k, j).
  • Output: The minimum total cost to merge all items into one item.

Steps:

  1. Subproblem: fi,jf_{i, j} be the minimum cost to merge items from ii to jj.
  2. Recurrence relation:
fi,j={0if i=jmin⁡i≤k<j{fi,k+fk+1,j+cost(i,k,j)}if i<jf_{i, j} = \begin{cases} 0 & \text{if } i = j \\ \min\limits_{i \leq k < j} \{f_{i, k} + f_{k + 1, j} + cost(i, k, j)\} & \text{if } i < j \end{cases}
  1. Answer: f1,nf_{1, n}.

O(n3)O(n^3)

int cost(int i, int k, int j) { return ...; }
int IntervalDP(int n) {
    vector<vector<int>> f(n + 1, vector<int>(n + 1, 0));
    for (int d = 2; d <= n; d++) {
        for (int i = 1; i <= n - d + 1; i++) {
            int j = i + d - 1;
            f[i][j] = INT_MAX;
            for (int k = i; k < j; k++) {
                f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + cost(i, k, j));
            }
        }
    }
    return f[1][n];
}
Search

Loading search…