ymduu+2

初心を忘れないのでツンデレとPSPが今でも好き、技術メモとか制作物とかそういうの

ABC113 D Number of Amidakuji

言い訳

codevsたのしかったです

例の表

https://docs.google.com/spreadsheets/d/1nXQpWJ7fddnfDNqcdBumj2WzCbIy_H06upI6R-qkI/edit#gid=0

所見

一発で思いついたぞヤッホーと思っていたら既に解いた問題だった(は?)

問題概要

https://atcoder.jp/contests/abc113/submissions/5408429
特定条件をみたす「正しいあみだくじ」のうち、左から1番目の線から始めた時左からK番目の線に到達するものの個数を1000000007で割った余りを求めよ。

取った方針

直線がW <= 8本しかないので、1行について全探索ができる。
y行目のx列目(0 origin)にいる場合の数をdp[y][x] とおくと、x-1番目の間(0 origin) に直線があるときdp[y+1][x-1] += dp[y][x]、x番目の間に直線があるときdp[y+1][x+1] += dp[y][x]、両方に直線がない時dp[y+1][x] += dp[y][x] のようなDPができる。
dp[H][K] が答え。

正しい方針

同上

得られた知見

  • m次元->1次元 x mにしてO(Nm)をO(Nm)にするテク(頻出っぽい)
    • 独立に考えてもいいものは独立に考える
  • 場合の数 -> 纏められる状態(今回はy行x列に到達するあみだくじの数)を纏めて考える

解くのに必要な要素

  • 独立に考えてもいいものを独立に考える -> DP

周辺調査によって得られた知見

特になし