例如:
n = 13 = b1101
只有i = 1
k = n - 2^i = 11 = b1011
同样,只有i = 2
k = n - 2^i = 7 = b111
由于玩家A不能再进行任何动作,因此玩家B获胜
我推断,在任何一步,我们只能选择一个i,这样在n的二进制表示中的相应位置上有一个0。
例如:
如果n = 1010010,那么我只能是{0,2,3,5}。
但我无法继续前进。极小极大算法并不是让我感到惊讶。我会感激任何帮助。谢谢提前
答案 0 :(得分:3)
假设n不是太大,我们可以使用动态编程来解决这个问题。 定义一个数组A [1:n],其中A [i]表示玩家我是否会在输入i上获胜。 让我们使用解释:
A[i] = 1, if A wins on input i,
A[i] = 0, if A loses on input i.
现在A可以自下而上计算如下:
A[1] = 0, A[2] = 1.
For j=3:n {
Assign A[j] = 1 if there exists a number i such that (A[j-2^i] = 0) AND
(number of 1's in i >= number of 1's in j)
Otherwise Assign A[j] = 0
}