像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

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

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

EGZ 定理:

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

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

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

这样只需要依次满足每个班的需求就行了,这是一个简单 dp,fi,j,k 能否表示前 i 袋,拿了 j 袋,余数为 k,复杂度 O(n3),注意到 dp 值是 boolean 的,所以可以压缩到 O(n3w)

posted @   寂静的海底  阅读(30)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起