关于容斥原理

简单的不说了,直接开题。

P1450 [HAOI2008] 硬币购物

题意

\(c1, c2, c3, c4\) 四种面值的硬币,询问多次,给你每个硬币最多有多少个,问凑出 \(S\) 面值的方案。

分析

考虑一个 \(f_i\) 是 i 号硬币不满足条件的方案数,那么答案即为 \(U - \sum_i^4 |\cup U_i|\)

第一部分,即不考虑限制的答案,可以考虑一个完全背包,时间复杂度 \(O(4S)\)

第二部分可以尝试一下容斥。你某一个硬币 i 取大于 \(d_i\) 个的方案数,就是先去上 \(d_i + 1\) 个,然后随便取。所以我们直接将 \(S\) 减去 \((d_i + 1) \times c_i\),然后依旧完全背包。时间复杂度 \(O(2^4 \times n \times S^2)\)

考虑到可以预处理,则复杂度为 \(O(4S + 2^nn)\)

posted @ 2025-10-26 11:10  yanbinmu  阅读(9)  评论(0)    收藏  举报