*[[Problem 391:http://projecteuler.net/problem=391]] 「ホッピングゲーム」 [#z5111714]

0 から &tex{k}; までの数を2進法で書き下したときの 1 の個数を &tex{s_{k}}; としよう.~
例えば, 0 から 5 までを2進法で書くと, 0, 1, 10, 11, 100, 101 となる. 7つの 1 があるので, &tex{s_{5}}; = 7 となる.~
数列 S = {&tex{s_{k} : k ≥ 0}};} は {0, 1, 2, 4, 5, 7, 9, 12, ...} で始まる数列となる.

2人で行うゲームがある. ゲーム開始前に, ある数 &tex{n}; を選んでおく. カウンタ &tex{c}; があって, それは 0 から始まる. それぞれの局面で, 対局者は 1 から &tex{n}; (&tex{n};を含む) までのある数を選び, その数だけ &tex{c}; を増やす. その結果得られる &tex{c}; の値は数列 S の要素でなければならない. もしそのような有効な指し手を打てない場合, 対局者は負けとなる.

例を示そう :~
&tex{n}; = 5 とし, &tex{c}; は 0 から始まる.~
先手は 4 を選び, &tex{c}; は 0 + 4 = 4 となる.~
後手は 5 を選び, &tex{c}; は 4 + 5 = 9 となる.~
先手は 3 を選び, &tex{c}; は 9 + 3 = 12 となる.~
以下同様.~
留意すべき点として, &tex{c}; は常に S に属していなければならない, そしてそれぞれの対局者はたかだか &tex{n}; までの数で &tex{c}; を増加させていくことができる.

先手必勝となるように先手が最初の局面で選べる一番大きい数字を M(&tex{n};) とし, そしてそのような指し手がない場合は M(&tex{n};) = 0 としよう. 例えば,  M(2) = 2, M(7) = 1, M(20) = 4 となる.

1 ≤ &tex{n}; ≤ 20 のとき Σ(M(&tex{n};))&sup{3}; = 8150 がすでに与えられている.

1 ≤ &tex{n}; ≤ 1000 のときの Σ(M(&tex{n};))&sup{3}; を求めよ.

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS