洛谷2599 【ZJOI2009】取石子游戏(博弈论+DP)

本文详细分析了ZJOI2009年的取石子游戏问题,通过博弈论和动态规划(DP)方法探讨了必胜与必败状态的判断。通过定义L[i][j]和R[i][j]数组,确定了必败状态的唯一解,并给出递推求解的策略。最终,文章提供了代码实现来解决这个问题。
摘要由CSDN通过智能技术生成

传送门

【题目分析】

这谁想得到要DP啊。。。。。ZJOI果然神题倍出。

参考了YYB的博客,传送门。(确实讲的很好!一看就懂!)

定义两个数组:L[i][j]R[i][j],L[i][j]表示在区间[i,j]左边放一堆数量为L[i][j]的石子,此时先手必败,R[i][j]表示在区间[i,j]右侧放一堆数量为R[i][j]的石子,此时先手必败。

如果存在两个或以上的L[i][j],那么显然左边的可以通过取任意个石子相互转化,就形成了必败局势到必败局势的转移,非法。而如果不存在L[i][j],即无论左边有多少个石子先手都是必胜,所以一旦拿最左边一堆的石子,局势仍然为必胜态,先手必输,所以只会取最右边的石子,而不管怎么取,场面仍然为先手必败态,所以又出现了必败到必败的转移,非法,所以可以保证L和R都拥有唯一的解。

所以求出两个数组后只用判断a[1]是否与L[2][n]相等即可。

所以大力讨论一波,假设我们已经求出所有区间长度为len-1的L和R值,现在考虑如何去求区间长度为len的L,R。

为了简便叙述,假设我们现在要求的区间为[i,j],令l=L[i][j-1],r=R[i][j-1],x=a[j]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值