区间DP对于我这个井(又坑又水,横竖都2)来说,确实很烦人的。。。不论怎么学就是弄不明白~但是今天貌似有点开窍了一点,琢磨出来点东西,在这里也就写一下~啦啦啦~
首先,线性DP都是初状态和末状态的,转移也是分层次转移,关键在于每一次转移的方式是差不多的,大都是2个数比较得出下一个;而区间型动态的初、末状态虽然明确,但MS是得不出来什么具体的东西,因此需要自习考虑,另外,区间动态的每一层都要枚举比它低一层的所有状态。
举两个例子:1、添乘号:f[ i ][ j ][ k ] = max ( f[ i ][ t ][ x ] * f[ t + 1 ][ j ][ k - x ] ) { t , x | i < t < j , 0 < x < k } 区间[ i , j ]内有k个乘号
2、合并石子:f[ i ][ j ] = min ( f[ i ][ k ] , f[ k + 1 ][ j ] ) + s[ i ][ j ] { i < k < j }从i开始顺时针j堆石子合并后的最大值
这里面之所以不是区间 [ i , j ] 是因为石子是环形的。
嗯差不多就这么多啦~啦啦啦~
首先,线性DP都是初状态和末状态的,转移也是分层次转移,关键在于每一次转移的方式是差不多的,大都是2个数比较得出下一个;而区间型动态的初、末状态虽然明确,但MS是得不出来什么具体的东西,因此需要自习考虑,另外,区间动态的每一层都要枚举比它低一层的所有状态。
举两个例子:1、添乘号:f[ i ][ j ][ k ] = max ( f[ i ][ t ][ x ] * f[ t + 1 ][ j ][ k - x ] ) { t , x | i < t < j , 0 < x < k } 区间[ i , j ]内有k个乘号
2、合并石子:f[ i ][ j ] = min ( f[ i ][ k ] , f[ k + 1 ][ j ] ) + s[ i ][ j ] { i < k < j }从i开始顺时针j堆石子合并后的最大值
这里面之所以不是区间 [ i , j ] 是因为石子是环形的。
嗯差不多就这么多啦~啦啦啦~