$dp$ + 组合数学.
- 如果值域很小,那么可以直接设 $f(i,j)$ 表示考虑了前 $i$ 个人,第 $i$ 个人选 $j$ 的方案数.
- 于是考虑离散化.将这些区间离散化为 $O(n)$ 个区间,区间按 $l$ 从小到大排序,且互不相交.
- 设 $f(i,j)$ 表示考虑了前 $i$ 个人,第 $i$ 个人参了赛,且选择的数在第 $j$ 个区间内的方案数.
- 那么 $1\sim i-1$ 这些人选择的数有在区间 $j$ 内的,也有不在区间 $j$ 内的.若有 $m$ 个在区间 $j$ 内的,区间 $j$ 的长度为 $L$ ,那么方案数为 ${L+m-1\choose m}$ ,因为 $i$ 必须选.而不在区间 $j$ 内的部分就是个前缀和.
- 于是大力枚举从 $k$ 转移来,前 $p$ 个人都没选在区间 $j$ 内,用前缀和优化一下转移就好了.
- 时间复杂度 $O(n^3)$ .
1 |
|