(2020-10-11编写)有趣的简单博弈/贪心一道

在我校历年入ACM队笔试(你没看错,是笔试)题里看到一道这样的题,挺有意思的,写出来分享分享。可能是一道非常经典的题,但我反正没见过,就写在这了。

题目大意: 2 n 2n 2n颗石子,每颗石子有两个权值 a i , b i a_i,b_i ai,bi。两个人甲、乙用这些石子玩游戏,两人轮流取石子,每一轮取一颗石子,最后每个人都取到 n n n颗石子。此时,甲的分数为他取到的石子的 a i a_i ai之和,乙的分数为他取到的石子的 b i b_i bi之和,谁分数高,谁就取得游戏的胜利。给定所有 2 n 2n 2n颗石子的 a i , b i a_i,b_i ai,bi,设计一个策略使甲(先手)尽可能赢(如果看成ACM题的话,就输出先手能不能赢即可)。

做法: 因为这是笔试题,所以策略不可能太复杂,肯定是能用一两句话能说出来的。但背后的原因可能就不是短短两句话能说完的了。
说说我是怎么想的:很容易想到一个策略——总是取当前 a i a_i ai最大的石子。但也很容易找到反例:两颗石子分别为 ( 7 , 1 ) , ( 2 , 8 ) (7,1),(2,8) (7,1),(2,8)(括号内左边为 a i a_i ai,右边为 b i b_i bi)时,先取 ( 7 , 1 ) (7,1) (7,1),对方取 ( 2 , 8 ) (2,8) (2,8),就输了,而先取 ( 2 , 8 ) (2,8) (2,8),对方取 ( 7 , 1 ) (7,1) (7,1),却能够赢。所以这个策略显然不对。
注意到,一个人取石子,他不仅获得了这颗石子的收益,还阻止了另一个人获得这颗石子的收益,因此我们可以这样考虑这个游戏:每个人当前的分数不单单是他当前取到的所有石子的收益,而还包含一个“潜在收益”,即还没有被取的石子的收益。这样一来,他们最终的分数既仍然是题目中规定的最终分数(因为石子都取完了,没有“潜在收益”),又对于过程中情势的判断很有帮助。
“尽可能赢”这个概念很模糊,用具体的数学语言描述,应该是“让(甲的最终分数-乙的最终分数)最大”。甲的目标如此,乙的目标就是反过来。当甲取一颗石子时,他的分数 + a i +a_i +ai,对方的分数 − b i -b_i bi(潜在收益减少),因此(甲-乙)就增加了 a i + b i a_i+b_i ai+bi;当乙取石子时,我们发现(乙-甲)也是增加 a i + b i a_i+b_i ai+bi
既然两边的目标具有对称性,产生的影响也具有对称性,此时一个贪心的策略就很明显了:取当前还没取的石子中, a i + b i a_i+b_i ai+bi最大的。 如果不这样取,那么对手取走 a i + b i a_i+b_i ai+bi最大的石子,从全局看来,对手就更具优势了。
用这个策略回头看前面的例子,两颗石子的 a i + b i a_i+b_i ai+bi分别为 8 8 8 10 10 10,因此先取更大的 ( 2 , 8 ) (2,8) (2,8)最优,符合我们的考虑。
那么我们就解决了这一题。

你可能感兴趣的:((2020-10-11编写)有趣的简单博弈/贪心一道)