解法https://yukicoder.me/submissions/218737数え上げなのでDPで考えてみる。ついでにNが10^3くらいなので、区間DPで考えてみる。S[L..R]を回分かい分解する組み合わせ数」というDPが思いつく。計算量は一旦置いておいて更新を考えてみよう。再帰的な構造で回分かい分解を考えてみると、S[L..R]の回文かい分解は、S[L..l]とS[r..R]が同じであるならば、残りのS[l+1...r-1]の回文かい分解をすればいいと分かる。2]...という感じである。愚直に書けばdp状態O(N^2)、遷移O(N)、部分列が等しいかの判定O(N)で全体O(N^4)これを高速化していく方針で考える。単一文字列での部分列の一致判定の高速化をする。参考2愚直にやるとO(N)かかるが、これをO(1)でやる。自分はローリングハッシュを使ったが、色々な手法がある。これでもまだ全体O(N^3)である。DPの更新式を見てみると、DPの添字のLに対応するRは一意に定まっていることが分かる。これは左右の端から1つずつ減らしていっているからである。そのため、メモ化する時にRも一緒に保存しておく必要は無い。状態数がO(N^2)だと思っていたが、実際にはO(N)となる。これでメモ化すれば、全体O(N^2)となり通る。B]月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。