首先可以把问题转化一下:m堆石子,一共石子数不超过(n-m)颗,每次可以将一堆中一些石子推向前一堆,无法操作则失败,问有多少种方法使得先手必胜? 然后这个显然是个阶梯Nim,然后有这样的结论:奇数层异或和为0.具体证明:参考这篇博客,当然不是我写的.如果不知道结论,里面有例题POJ1704可以做一下. 然后直接DP显然会T飞,考虑一个按位DP的技巧,f[i][j]表示确定前i位异或起来为0,剩下j个棋子的方案数.组合数相乘转移,注意一些细节即可.复杂度O(nmlogn) #include<bit…