区间和序列上的dp
区间上的dp状态设计最基本的形式: \(F[i]\) 表示以i结尾的最优值或方案数。 \(F[i][k]\) 表示以i结尾附加信息为k的最优值或方案数。 当然可以有多维附加信息。 转移的话往往是枚举上一个断点。 \(F[i]=max \{ F[j]+ w(j+1,i) | j是一个满足转移条件的断点\}\) 。 另一个很常见的是:$ f[i][j]$前i个位置分成j段/选出j个的最优值。 这是最简单的一类序列上的dp bzoj1003 有m个码头和e条航线,每天航线有成本。有连续n天需要从1号码头到m号码头运输货物。每个码头会在某些天数区间内不许经过。每更换一次运输路线,要付出k的成本。 求这n天的最小总成本。 m<=20, n<=100 SOLUTION: 其实就是分成很多段,每一段选同一个运输路线,然后得到一个最优的划分方案,使得成本最小。 f[i]表示前i天的运输最小成本。 \(f[i]=min\{ f[j]+k+w(j+1,i)*(i-j) | j<i \}\) 其中w(x,y)表示最短的在第x天到第y天都能用的路线长度; 处理方法: 首先枚举所有的x,y,然后利用最短路算法(这里dijkstra)算出x~y这些天都可以满足的1到m的最短路径;(计算方法:首先数组$use[i][j] $记录第i个点在第j天是否可以使用,在dijkstra时传入x和y,提前预处理