题解:P5997 [PA 2014] Pakowanie

原题传送门

博客食用更佳?

这题很多人一眼就以为是背包问题,但发现背包数量太多,容量太大,dp 数组根本开不下 qwq。

于是我们看了一眼数据范围:\(n \leq 24\),原来是状压 dp 啊!

  1. 贪心:最后用的包一定是最大的几个,所以 \(c_i\) 要从大往小排序。
  2. 设计状态:这题状态还是比较好想的,这题显然需要记录最优方法的用了几个包,还剩多少空间,所以 \(dp_{i, 0}\) 记录最优状态用了几个包,\(dp_{i, 1}\) 记录在最优状态下最后一个包还剩多少空间。
  3. 初值:\(dp_{0, 0} = 0, dp_{0, 1} = 0, dp_{i, 0} = m + 1(1 \le i < 2 ^ n - 1)\)
  4. 转移:对于状态 \(i\) 和一个值 \(0 \le j < n\),判断第 \(j\) 个元素是否被选,若未被选,新状态就是 \(i \oplus 2 ^ j\)。接着看这个包能不能装下,若不能用一个新包,看能不能装下。
  5. 答案:\(dp_{2 ^ n - 1, 0}\)
  6. 注意!dp 初值不要赋无穷大,不然会越界,变成 \(95\) 分,详见这里

题解结束了,有疑问或题解有误欢迎私信,感谢大家的观看。

posted @ 2025-04-13 08:05  Sparse_Table  阅读(21)  评论(0)    收藏  举报