【题解】CF1798F 结论 数学 简单dp

结论题,算是被 *2500 打爆了。

EGZ 定理:

对于 $2n-1$ 个数,我们一定能选出 $n$ 个,使得其和是 $n$ 的倍数。

这个定理告诉我们,只要一个班的人数不大于目前没有分配的包数的一半,那么一定存在一种方式使得这个班能够分配到 $s$ 袋和为 $s$ 倍数的糖果。

考虑只让这样的班(人数大于目前没分配的其它班)有一个,最后用自由的那袋去调整,方法是只需要把最大的班放在最后就行了,这样其他班都满足剩余袋数 $\geq 2n-1$ 的。

这样只需要依次满足每个班的需求就行了,这是一个简单 dp,$f_{i,j,k}$ 能否表示前 $i$ 袋,拿了 $j$ 袋,余数为 $k$,复杂度 $O({n^3})$,注意到 dp 值是 boolean 的,所以可以压缩到 $O(\frac {n^3} w)$。

posted @ 2023-06-08 16:22  寂静的海底  阅读(22)  评论(0编辑  收藏  举报  来源