P2473 [SCOI2008] 奖励关 题解
首先看这个范围又看到这种题目,就知道是状压 DP 跑不了了。
一个直接的思路是设 \(f_{i,s}\) 表示当前到第 \(i\) 轮,宝物拿取状态为 \(s\) 时的得分,但是我们发现这玩意直接推的话会出现一些奇奇怪怪的状态,主要是这个系统有时扔出来的宝物不能让你到达 \(s\) 或者是你推着推着 \(s\) 里面 1 的个数就大于 \(i\) 了。
所以我们需要换个方法,采用逆推的思路。
逆推的话状态需要改一下:\(f_{i,s}\) 表示 1 到 \(i - 1\) 轮宝物拿取状态为 \(s\),第 \(i\) 轮到第 \(k\) 轮的平均得分。
这样的话由于 \(i+1\) 到 \(k\) 的所有状态都是合法的,自然 \(i\) 的状态也是合法的。
于是我们就可以得到如下的转移方程:
\[f_{i,s}= \max\{f_{i+1,s},f_{i+1,s|(1 <<(j-1))}+p_j \mid j \in S_1\}
\]
其中上式的 \(S_1\) 表示在当前状态 \(s\) 下,能够拿取的宝物集合。
于是这道题做完了,答案是 \(f_{1,0}\)。