区间dp小总结:
1、一般用f[i][j]表示区间【i,j】的最值
2、求值顺序
(1)边界值:一般长度为1
for(int i=1; i<=n; i++){
f[i][j]=某值;
}
(2) 区间长度从小到大
for(int l=2; l<=n; l++){//区间长度从2开始
for(int i=1; i+l-1<=n; i++)//枚举左端点
{
int j=i+l-1;//算出右端点
.....
}
}
3、状态转移方程
(1)一般考虑区间[i,j]端点的情况进行分析
(2)枚举间断点将区间分为两部分。
环形区间dp:
只需将环拆成多条链,每条链按照上面方式处理完,取这些链中的最值即可。
注意点: 1、存储数组copy原来数组一份成环,长度为2*n, 开数组至少是数据范围的2倍。
2. 区间[i,j], j的范围也扩大为2N了。