P4141 消失之物 分析
__ryp__
·
·
个人记录
对于原问题,这就是一个简单的计数 DP。设 f(i) 是将这些物品放进体积为 i 的背包内的方法数量,则转移方程是
f(i) =
\begin{cases}
0 & i = -1 \\
1 & i = 0 \\
\sum\limits_{j = 0}^{n} f(i - \min (w_j, i + 1)) & \text{otherwise}
\end{cases}
写成代码便是
rep (i, 0, n) rrep (j, v, w[i]) dp[j] += dp[j - w[i]];
对于本问题,我们要求的是删除某个物品 i 后的最大容积。
明显我们有以下等式:
f(n) = f(n - w_0) + f(n - w_1) + \cdots f (n - w_{i}) + \cdots + f(n - w_k)
删除物品 i 后的 f(n) 应当减去 f(n - w_i)。于是,我们可以计算出去除了 i 后的 tp:
rep (i, 0, n) rep (j, 0, v + 1)
if (j < w[i]) tp[j] = dp[j];
else tp[j] = dp[j] - dp[j - w[i]];
这个复杂度是 O(nV) 的,显然能够通过。
编码时注意取模即可。