题目大意
翻牌配对
时限 2000 ms,内存 1024 MB。
给定整数 以及 个两两不同的整数 。
桌上共有 张牌,每个数值 恰好写在其中两张牌的正面上,牌的背面没有任何信息。
初始时把所有牌随机洗乱后背面朝上摆放。等价地说:设 是把序列 均匀随机打乱后得到的长度为 的序列,则第 张牌正面的数字为 。
玩家知道所有的 ,但最初不知道任何 。一旦某张牌 被翻开,玩家就会永久记住 的值。
游戏开始时,生命值为 ,得分为 ,尚未被移除的牌的下标集合为 。玩家在任何时刻都知道当前的生命值、得分和集合 。
重复执行以下步骤,直到生命值变为 或者 为空:
-
玩家根据当前已知信息,从 中选择一张牌 并翻开,获知 。
-
玩家根据当前已知信息(包括刚获知的 ),从 中选择一张牌 并翻开,获知 。
-
若 ,则把 从 中移除,并把得分增加 。
-
若 ,则把这两张牌翻回背面,并把生命值减少 。
玩家以最大化最终得分的期望值为目标采取最优策略。请求出游戏结束时的期望得分。
输入从标准输入按以下格式给出:
第一行两个整数 和 。
第二行 个整数 。
输出一行一个实数,表示最优策略下游戏结束时的期望得分。答案与标准答案的绝对误差或相对误差不超过 即视为正确。
-
-
-
-
所有输入值均为整数。
1 | 3 2 |
1 | 3.8666666667 |
游戏可能按如下方式进行。为了区分这六张牌,分别称它们为 A、B、C、D、E、F。
游戏以生命值 、得分 开始。
翻开卡牌 A,上面写着 。
翻开卡牌 B,上面写着 。
因为数字不同,把两张牌翻回背面,生命值减少 ,变为 。
翻开卡牌 C,上面写着 。
翻开卡牌 A,上面写着 。
因为数字相同,把这两张牌移出桌面,得分增加 ,变为 。
翻开卡牌 D,上面写着 。
翻开卡牌 E,上面写着 。
因为数字不同,把两张牌翻回背面,生命值减少 ,变为 。
生命值变为 ,游戏结束,最终得分为 。
注意,在上述过程中刚翻开卡牌 C 之后,玩家可以利用「卡牌 C 正面写着 」这一信息,选择翻开另一张已经知道写着 的卡牌 A。
1 | 5 2 |
1 | 17.8560846561 |
1 | 20 10 |
1 | 770.7122293087 |
思路讲解
AC代码
1 |