BZOJ 1677. [Usaco2005 Jan]Sumsets 求和

传送门

可以直接完全背包,复杂度 $O(n \log n)$

考虑另一种比较神仙的做法

设 $f[i]$ 表示相加为 $i$ 的方案数

考虑某个方案中加的最小的数

当 $i$ 为奇数时,显然加的最小的数一定为 $1$,则 $f[i]=f[i-1]$

当 $i$ 为偶数时,把加的最小的数分为 $1$ 和大于 $1$,$1$ 的贡献同样是 $f[i-1]$

如果加的最小的数大于 $1$,又因为加的数都是 $2$ 的幂次,说明加的数都是偶数,则把加的数全部除以 $2$ 的方案同样合法

发现除以 $2$ 后的每个方案恰好对应 $f[i/2]$ 的每个方案

所以 $f[i]=f[i-1]+f[i/2]$

代码就不用了吧......

posted @ 2019-08-08 13:46  LLTYYC  阅读(119)  评论(0编辑  收藏  举报