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}\)

Code:GitHub CodeBase-of-Plozia P2473 [SCOI2008] 奖励关

posted @ 2022-04-17 18:35  Plozia  阅读(26)  评论(0编辑  收藏  举报