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

本文介绍了一种基于2n颗石子的游戏策略,每颗石子有两个权值ai和bi。游戏中,两人轮流取石子,目标是使得己方得分最大化。文章详细解释了一种有效的策略,即每次选择当前未被取走的石子中ai+bi最大的那颗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值