ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

Educational DP Contest / DP まとめコンテスト K - Stones

問題
提出コード

解法

素直にグランディ数を求めれば良いです。例によってグランディ数についてはこちらがわかりやすいかと思います。

グランディ数 - zukky162のブログ

今回は、重要なのがグランディ数は0であるか1であるか、なので2以上の場合も1にしてしまいます。
dp[i] = i個石が存在する場合のグランディ数
とすると、dp[K] = 0の場合は後手の勝利、1ならば先手の勝利です。
初期状態はdp[0] = 0になります。
 dp[i]は、次のようにして求めることができます。
i以下のa_jについて、dp[i-a_{j}]がすべて1であればdp[i]=0、そうでなければdp[i] = 1 これは定義にのっとった計算方法です。これをもとにして素直に遷移していけば、dp[K]が計算できます。