Official
J - Two Paths Editorial
by
J - Two Paths Editorial
by
anmichi
\(2\) つのパスを \((0,0)\) から同時に \(1\) マスずつ進めていくことを考えます。
\(2\) つのパスを \(P,Q\) とします。\(P\) の先端が \((i,j)\) のとき、 \(Q\) の先端は \((i+k,j-k)\) と表せます(ここで、\(k<0\) の場合は \(P,Q\) が最後に重なるマス以降のパスを交換することで\(0 \leq k \) の場合のみ考えればいいことが分かります)。
ここで、以下のDPを考えます。
\(dp[i][j][k]:=\) \(P\) の先端が \((i,j)\) , \(Q\) の先端が \((i+k,j-k)\) のとき、ここまでで得られるクッキーの個数の最大値
遷移は、\(P,Q\) がそれぞれ横か縦に進む \(4\) 通りです。パスの先端がグリッドの外に出る場合、パスを進めた結果先端が重なる場合に注意してください。
答えは \(dp[N][N][0]\) となり、計算量は \(O(N^3)\) です。
実装例 (C++, 64 ms)
posted:
last update:
