状压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\)

浙公网安备 33010602011771号