Prophecy桁の数が与えられる。桁の間にいくつか*1線を引いて分割し、新たな数列を得ることを考えよう。ように分割すると、数列が得られる。状態に持った、以下の動的計画法を用いたプログラム。なり、求められている実行速度にはならない。状態数はどうしようもない気がするので、中身の高速化を試みよう。これらを個別に解決してやろう。dp[max][head]と、添字が連続した形になっていることに気づくだろう。ループに入ったら予め累積和を計算しておくことにしよう。ちなみに、最初の解を配るDPの形で書いた場合、この累積和に気づきにくいかもしれない。遷移の高速化をしたい場合、貰うDPの形にすると「前」の状態たちがよい性質を持っていることがある。ループの順番が異なると、内側のループ毎に累積和の値が変化してしまい、うまくいかない。そのような場合は、ループ順番の入れ替えを検討すべきだろう。組について全て処理しているが、これには無駄がある。おける処理で、同じ位置での処理がたくさん発生しそうだ。同じ処理がたくさんあるなら、結果をキャッシュすればよい。いうことで、次のようなメモ化再帰を考えよう。値として正しくない可能性がある。数えて、最初に異なるインデックスの差分」を与えるようにしたほうが、実装上都合が良い。数値として大きい}とする。メモ化再帰の部分は次のようなコードになるだろう。Moneymanager月別アーカイブはてなブログをはじめよう!hama_DUさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。