luogu P5765
Problem
题目
$ n $ 堆石头,从中选择若干堆,进行Nim游戏,并规定先手取的第一堆。问先手必败的方案数量。
Solution
枚举第一步取第 k 堆,对于剩下的 n−1 堆dp, fi 表示这 n−1 堆中异或和为 i 的方案数。
这部分的答案为 i≥ak∑fi
Code
luogu P2148
Problem
problem
Solution
一个状态(两堆石头)用 (x,y) 表示
$ sg(x,y)=f((x−1)∣(y−1)) $
其中 ∣ 表示按位或运算, f(x) 表示 x 的二进制表示下 0 出现的最小位置(从位置0开始)。
证明:打表。。。题解
Code
luogu P2964
Problem
problem
Solution
dp。 f(i,j) 表示先手从第 i 个开始取 j 个,直到游戏结束时先手能获得的最大分数。
令
$ s(i)=∑ina(i) $
则
$ f(i,j)=s(i)−k=1maxmin(n−(i+j)+1,j×2)f(i+j,k) $
答案为 max(f(1,1),f(1,2))
n^2优化
令 f′(i,j)=k=1minjf(i,k)
$ f′(i,j)=s(i)−f′(i+j,min(n−(i+j)+1,j×2)) $
答案为 f(1,2)
Code
n^3
n^2