人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

Educational DP Contest / DP まとめコンテスト [ K - Stones ]をPythonで解く

問題

atcoder.jp

解法

K個の石の山に対して、

dp[k] := k個の石からなる山で先手が勝ち状態か(=1なら勝ち状態)

というdpを設計。

数が小さい方から、Kまでの石の山をシミュレーションしてdpの数値を埋めていく。
まずはk = 0と非常に単純な状態から調べていく。

dp[0] = 0 ならば、先手負けとなる。
k > 0以上のケースで、次がdp[0]に遷移するならば、dp[0] = 0で、そこで行動する手番(つまり後手)は負けとわかる。

実装

基本、はまやん氏のC++コードをPythonコンバート。
細かく調整。

参考

blog.hamayanhamayan.com