两端取数游戏的高效解法与随机情况下的特殊变式(博弈论?贪心)

本文探讨了一种两端取数的游戏,包括博弈版本和贪心版本的策略。在博弈版本中,分析了先手在不同情况下是否能确保胜利。在贪心版本中,提出了一种O(n)时间复杂度的解决方案,利用单调栈进行合并优化。对于随机情况下的特殊变式,通过CDQ分治策略处理线段类询问,解决了每次游戏的最优策略问题。
摘要由CSDN通过智能技术生成

两端取数游戏:
一个数列 a a a
每次只能取出两端的数,先后手互换。

1.博弈版本:数字和大者胜,求先手必胜策略。
首先在 ∣ a ∣ ≡ 1 ( m o d 2 ) |a| \equiv 1 \pmod 2 a1(mod2)时是不一定赢的。
比如:7 9 3 5 2
可以发现先手是必输的。
然后在 2 ∣ ∣ a ∣ \small2 \large| \small|a| 2a时,
可以选第一个,然后对方只能选第2或n个。
发现2和n都是偶数。
实际上你可以一直拿第奇数个使得对面只能拿第偶数个。
那么如果第奇数个的和大于第偶数个,那么你就赢了。
反之如果小于,可以第一次拿第n个,对面只能拿第奇数个。
如果等于?所以只能先手必不败。

2.博弈(贪心)版本:每个人想自己拿的数字和尽量大,求双方最优策略下的先手拿的数字和。
首先显然可以 O ( n 2 ) D P O(n^2)DP O(n2)DP
但是这个解法太过低效思博
我们需要一个高效高论的方法来解决加大范围的好毒瘤题。
需要转化。
像合并石子游戏的 O ( n log ⁡ n ) O(n\log n) O(nlogn)解法一样,我们需要考虑只有3个数的时候我们可不可以把这3个数合并。
如果 a [ 0 ] = x , a [ 1 ] = y , a [ 2 ] = z a[0] = x , a[1] = y , a[2] = z a[0]=x,a[1]=y,a[2]=z, x &lt; = y &gt; = z x&lt;=y&gt;=z x<=y>=z
那么可以意会,先手拿x,后手拿y,先手再拿z,合并为一个大小为 x + z − y x+z-y x+zy的数。
但是会不会后手不拿 y y y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值