动态规划泛做

发布时间 2023-12-18 15:41:56作者: 御坂夏铃

CF833B The Bakery

\(f_{i,k}\) 表示前 \(i\) 个数字分成 \(k\) 段的最大总价值,显然有暴力转移 \(f_{i,k}=f_{j,k-1}+kind(j+1,i)\),其中 \(kind(x,y)\) 表示 \([x,y]\) 中不同数字的种数。

但暴力转移是 \(O(n^2k)\) 的,考虑把 \(kind\) 函数拆开优化,把每种数字的贡献对应到区间中该种数字第一次出现的位置。对于数字 \(a_i\),其对 DP 数组产生贡献的范围是 \([pre_i,i)\),这部分转移过来能得到没出现过的数字 \(a_i\)

先枚举 \(k\),再枚举 \(n\),用线段树维护上一轮的 DP 数组加上转移的贡献,前缀 \(\max\) 即为当前 DP 值。