概述
区间DP:指在一段区间上进行的一系列动态规划
对于区间DP这一类问题,我们需要计算区间 [ 1 , n ] [1,n] [1,n]的答案,通常用一个二维数组 d p dp dp表示,其中 d p [ x ] [ y ] dp[x][y] dp[x][y]表示区间 [ x , y ] [x,y] [x,y]
有些题目, d p [ l ] [ r ] dp[l][r] dp[l][r]由 d p [ l ] [ r − 1 ] dp[l][r-1] dp[l][r−1]与 d p [ l + 1 ] [ r ] dp[l+1][r] dp[l+1][r]退到;也有题目,我们需要枚举 [ l , r ] [l,r] [l,r]内的中间点,由两个子问题合并得到,也就是说 d p [ l ] [ r ] dp[l][r] dp[l][r]由 d p [ ; ] [ l ] dp[;][l] dp[;][l]与 d p [ k + 1 ] [ r ] dp[k+1][r] dp[k+1][r]推得,其中 l ≤ k < r l\leq k<r l≤k<r
对于长度为n的区间DP,我们可以先计算 [ 1 , 1 ] , [ 2 , 2 ] . . . [ n , n ] [1,1],[2,2]...[n,n] [1,1],[2,2]...[n,n]的答案,再计算 [ 1 , 2 ] , [ 2 , 3 ] , . . . [ n − 1 , n ] [1,2],[2,3],...[n-1,n] [1,2],[2,3],...[n−1,n],以此类推,直到得到原问题的答案
例题:合并石子
题目
当前有 N N N 堆石子,他们并列在一排上,每堆石子都有一定的数量。我们需要把这些石子合并成为一堆,每次合并都只能把 相邻 的两堆合并到一起,每一次合并的代价都是这两堆石子的数量之和,经过 N − 1 N-1 N−1 次合并后成为一堆。求把这些石子合并成一堆所需的最小代价。
解析
根据动态