Title

状压DP杂题记录

[POI2004]PRZ

题面

首先观察 \(n \leq 16\) ,很明显的状压DP,设 \(dp_i\) 表示当前 状态为 i 所需要的最小花费,那么明显 \(dp[i]=0\) ,然后我们预处理出来每个状态的重量总和,以及在符合条件的情况下,他们同时过桥的时间是多少,记为 W 和 T 数组,然后对于每一个状态,我们枚举这个状态的子集,那么转移式为

\[dp_i=dp_j+T_{i \oplus j} \]

其中需满足 \(W_{i \oplus j} \leq WW\)\(i \subset j\) 时间复杂度为 $O(3^n) $

关于时间复杂度的证明:

设一个状态在二进制下一的个数是 k,则枚举子集为 \(2^k\) ,而状态中1的个数恰好是k的状态数量为 $C\left( n,k\right ) $
即为 \(\sum \limits _{k=0} ^n C(n,k) *2^k\) ,我们根据二项式定理,设 \(x=1,y=2\) ,整理可得 \((1+2)^n=3^n\)

代码

posted @ 2026-08-31 16:16  Nova_Kite  阅读(5)  评论(0)    收藏  举报