positional_notation ってスニペットがパッと出てこなかった
- 2部グラフ
- 互いに隣接しない頂点からなる集合を独立集合といい、頂点集合を n 個の独立集合に分割可能なグラフのことを n 部グラフ (n-partite graph) という。 (2部グラフ - Wikipedia)
ゲームDPはどのように実装するのが実装しやすいのだろうか(模索してみてもいいかも)
コンテスト中にやったこと
- まずは全列挙可能か検討した
- 全列挙で何通りかについて、最初はフィボナッチ数列なことに気づかなかった。実験コードを書いて、実行して値を見てフィボナッチ数列になっていることに気づいた
- 全列挙パートが難しかった
- itertools が使えない(使うと遅い)タイプの全探索は苦手
- DFS を書こうとしたが、うまく書けず。数え上げの DP を列挙に転用できることに気づいて DP 風に実装した
知見
- not adjacent な部分列の個数はフィボナッチ数になる
- $N\leq 60$ とかでも指数時間のオーダーになることもある
- 今回の計算量は $O(N \varphi^{N/2})$
- 数え上げの DP はそのまま列挙 DP に転用できる
- 和の分布を求める方法
- 値の範囲が小さい場合は、 FFT を使った畳み込みでよい
- 値の範囲が大きく、和の分布の特定の値のカウントだけを知りたい場合は、HashMap や二分探索をするとよい