题目链接:题目链接
题意:
有 G 种颜色的宝石,放在 B 个袋子里(每种颜色可以放多个)。
两人轮流选袋子(每个袋子只能被选 1 次),每次将选出来的袋子中的宝石放到 cooker 中,cooker 可能会起反应。
反应条件是 cooker 中出现 S 个一样颜色的宝石,而且一旦起反应,每 S 个一样颜色的宝石就会获得 1 个魔法石(同时反应)。
作为奖励,每次反应结束后当前玩家可以再选一个袋子继续游戏。
游戏目标是自己获得的魔法石尽量多,双方都采取最优策略的情况下,问最终两个玩家的魔法石之差。
题解:对于每一种状态,总的石头数是固定的,并且可以预处理出来,则只是分配的问题。用dp[i]表示状态i(能拿的置为1)的情况下先手减去后手分数的最大值。对于dp[i], 选第j个包, 如果这次拿好分数增加tp, 那么用 dp[i]+tp 去转移 dp[i^(1<< j)], 否则先后手交换, 用-dp[i]去更新dp[i^(1<< j)]。