P3188 [HNOI2007] 梦幻岛宝珠 解题报告

题意

给你 \(n\) 颗宝石,每颗宝石都有重量和价值。要你从这些宝石中选取一些宝石,保证总重量不超过 \(W\),且总价值最大,并输出最大的总价值。

对于 \(100\%\) 的数据,\(1\le n \le 100\)\(1\le W,w_i,v_i \le 2^{30}\)

保证每个 \(w_i\) 能写成 \(a \times 2^b\space (a,b \in \mathbb N)\) 的形式,\(a \leq 10\) , \(b \leq 30\),且答案不超过 \(2^{30}\)

思路

第一眼以为是个01背包板子,然后发现数据范围不对劲

之前好像在信友队做过类似的,但是我忘记怎么写了。

考虑将每一个 \(w_i\) 拆位,拆成 \(a \times 2 ^ b\) 的形式,然后按 \(b\) 分类成一组一组的就可以了。

考虑每一组内的情况,每一组内 \(a\) 就是体积。

\(dp_{i, j}\) 为在第 \(i\) 组中选取体积为 \(j\) 的最大值,\(w_{i,j}\)\(v_{i,j}\) 是处理后的宝石。

则有 \(dp_{i,j} = \max(dp_{i,j},\ dp_{i, j - v_{i, k}}\)

posted @ 2026-06-16 14:00  Luowj  阅读(5)  评论(0)    收藏  举报