作者babufong (哔哔)
看板puzzle
标题[中译] ProjectEuler 391 Hopping Game
时间Sun Jul 1 12:15:04 2012
391. Hopping Game
http://projecteuler.net/problem=391
使 s_k 为将 0 到 k 的数字以二进制表示时 1 的数量。
举例来说,将 0 到 5 以二进制表示时,我们得到 0, 1, 10, 11, 100, 101
一共有 7 个 1,故 s_5 = 7。
而数列 S = { s_k : k≧0 },起始几项为 {0, 1, 2, 4, 5, 7, 9, 12, ...}
有个游戏是两人玩的,游戏开始前会先选择一个数字 n,且有个计数器 c 起始值为 0。
轮到某玩家的回合时,该玩家选择 1 到 n(含)的其中一个数字且将该数加至计数器上
而 c 的值一定要是 S 的其中一位成员。
如果怎麽选择并加至计数器中皆无法达成条件,该玩家输掉这游戏。
这有个例子:
起初选择 n = 5,c = 0。
玩家 1 选择 4,所以 c 为 0 + 4 = 4。
玩家 2 选择 5,所以 c 为 4 + 5 = 9。
玩家 1 选择 3,所以 c 为 9 + 3 = 12。
以此类推
记得,c 一定属於 S,且每位玩家都可以将至多 n 的数加到 c 上。
使 M(n) 为玩家 1 在第一回合中,为了使自己一定会获得胜利,所能选择最大的数。
如果怎麽选都做不到,则 M(n) = 0。
举例,M(2) = 2、M(7) = 1、M(20) = 4。
已知 Σ(M(n))^3 = 8150,当 1 ≦ n ≦ 20。
请求出 Σ(M(n))^3,当 1 ≦ n ≦ 1000。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.224.2.175
1F:推 cj6u40:@/ 07/11 18:24