区间DP(超详细!!!)
一、问题 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起,求最少消几次能消完整个序列,n≤500。 f[i][j]表示消去区间[i,j]需要的最少次数。 则 ; 若a[i]=a[j],则还有 。 这里实际上是以区间长度为阶段的,这种DP我们通常称为区间DP。 区间DP的做法较为固定,即 枚举区间长度 ,再枚举左端点,之后枚举区间的断点进行转移。 二、概念 区间类型动态规划是线性动态规划的拓展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。(例:f[i][j]=f[i][k]+f[k+1][j]) 区间类动态规划的特点: 合并:即将两个或多个部分进行整合。 特征 :能将问题分解成为两两合并的形式。 求解:对整个问题设最优值,枚举合并点,将问题分解成为左右两个部分,最后将左右两个部分的最优值进行合并得到原问题的最优值。 三、例题 【例题一】石子合并: 【问题描述】 将n(1≤n≤200)堆石子绕 圆形 操场摆放,现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 (1)选择一种合并石子的方案,使得做n-1次合并,得分的总和最小。 (2)选择一种合并石子的方案,使得做n-1次合并,得分的总和最大。 【样例输入】 4 4 5 9 4 【样例输出】