dp 计数问题.
考虑将所有 $A_i$ 从小到大排序,依次插入到序列中,并对合法的方案数计数.
设 $dp(i,j,k,h)$ 表示插入了前 $i$ 个数,分成了 $j$ 段,已确定的元素差值之和为 $k$ ,即下图中 $y=A_i$ 直线下方部分长度,已经钦定了 $h$ 个左右边界 $(0\le h\le 2)$ 的方案数.
转移加入 $A_{i+1}$ 时,除了边界外,每段的两端都会多出 $(A_{i+1}-A_i)$ 的长度,即 $k$ 的增量为 $(A_{i+1}-A_i)\cdot (2j-h)$ .
再讨论一下 $A_{i+1}$ 插入到两端还是某段中,是否会新建一段,是否钦定为边界这些情况转移,时间复杂度 $O(n^2L)$ .
可以把第一维滚动掉来优化空间.
1 | //%std |