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

传送门 【题目分析】
这谁想得到要DP啊 。。。。。ZJOI果然神题倍出 。
参考了YYB的博客,传送门 。(确实讲的很好!一看就懂!)
定义两个数组:

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

文章插图

,L[i][j]表示在区间[i,j]左边放一堆数量为L[i][j]的石子,此时先手必败,R[i][j]表示在区间[i,j]右侧放一堆数量为R[i][j]的石子,此时先手必败 。
博弈论+DP  洛谷2599 【ZJOI2009】取石子游戏

文章插图
如果存在两个或以上的L[i][j],那么显然左边的可以通过取任意个石子相互转化,就形成了必败局势到必败局势的转移,非法 。而如果不存在L[i][j],即无论左边有多少个石子先手都是必胜,所以一旦拿最左边一堆的石子,局势仍然为必胜态,先手必输,所以只会取最右边的石子,而不管怎么取,场面仍然为先手必败态,所以又出现了必败到必败的转移,非法,所以可以保证L和R都拥有唯一的解 。
所以求出两个数组后只用判断a[1]是否与L[2][n]相等即可 。
所以大力讨论一波,假设我们已经求出所有区间长度为len-1的L和R值,现在考虑如何去求区间长度为len的L,R 。
【博弈论+DP洛谷2599 【ZJOI2009】取石子游戏】为了简便叙述,假设我们现在要求的区间为[i,j],令l=L[i][j-1],r=R[i][j-1],x=a[j] 。