AtCoderやCodeforcesの問題解説記事が多め。Hard公式解説とだいたい同じ考察を辿ったんですが、最後の計算で違うことをしたので書いておきます。数列を作る方法は、ある要素の手前に、その要素より大きな要素を挿入することです。あるという風に思っておけば統一的に扱えます。)とすることで漏れなくダブりなく列挙することができます。ように同じ値が連続しているところにさらに同じ値を足すような場合でも正しく扱えるのがポイントです。数列の要素として数えることにします。いう長さ4の数列として扱います。位置関係を無視して挿入要素だけの列に先ほど見た条件から、数列のある位置にある値を挿入できるかどうかはその直後の値との前後関係のみによって決まり、数列の中での位置や他の要素とは全く関係がないことが分かります。このことから数列の位置関係は無視してよくて、例えばという数列の組は、単に各操作で挿入された要素だけを並べてとして考えても構いません。これまで「数列」と呼んできたものと混ざらないように、この挿入された要素を並べたものは「操作列」と呼ぶことにします。実際にこの操作列によって実現できる数列の組がいくつあるかは、各操作での挿入箇所の候補数(つまり既に追加されている自分より小さい要素の個数)を全て掛け合わせることで求められます。挿入DPっぽい何か次のステップですが、挿入DPっぽいことをします。まで順番に入れていきます。その過程で、挿入箇所の候補数による係数も処理していきます。次のようなDPを考えます。あるような操作列の通り数。それまでに発生した挿入箇所の候補数による係数は既に掛けられているものとする。遷移するときの係数を考えます。個挿入することを考えます。挿入した時に、数列への挿入箇所の候補数によって係数が何倍されるか」が求められ、それらを全て合計したものがDPの遷移の係数になります。)が既にできているとします。いう操作列を考えましょう。ついて、数列の中での挿入箇所の候補は2箇所あります。挿入箇所の候補は3箇所あります。係数が6倍されたことになります。重複組合せとして選んだ挿入箇所の選び方それぞれについて積を計算し、全て足したものです。これがDPの遷移の係数として採用すべき値です。係数は前計算この係数を毎度直接求めるのは難しいですが、DPで前計算することができます。以下のように定義します。係数を掛ければ良いです。これで本命のDPに使う係数を事前に求めておけば答えを求めることができます。024MODの値が入力で与えられています(固定MODだと埋め込みできちゃうことが理由だと思います)が、逆元などは使わないので問題ありません。YahooYahooYahooお題箱より。根室の巫女お題箱より。(1)はてなブログをはじめよう!betrue12さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。