P6240 好吃的题目 题解

题面稍微有一点不一样。

Statement

\(n\) 个物品,每个物品有价值 \(v_i\)、体积 \(w_i\)

\(q\) 次询问,问考虑 \([L..R]\) 区间的物品,用容量为 \(m\) 的背包最多能装多少价值的物品,有多少种方案,每个物品只能被装一次。

\(n\le 2\cdot 10^4, q\le 10^5, w_i,m_i\le 500, v_i\le 10^6\).

Solution

离线下来猫树分治。每次对于分治区间 \([l..r]\),回答所有跨过 \(mid\) 的询问。

如果我们知道两个“至多”的 01 背包数组,就可以 \(O(m)\) 每次回答。

如何处理出两个“至多”的 01 背包数组呢?在处理“恰好”的数组的同时对前一个取 max。

方案数的转移是显然的。

posted @ 2024-08-26 17:11  Laijinyi  阅读(26)  评论(0)    收藏  举报