同じタスクは一度しかできないものとする。個完了したとき、合宿に参加する。タスクをこなす順番をうまく選んだときの、もらえるお金の最大値を答えよ。偶数タスクの順番まず、合宿を無視するとき、タスクをこなす順番は貪欲に決定できることを確かめておこう。それぞれを先にこなした場合にもらえるお金を計算しておこう。:両者の差をとると、となる。これは今までもらえた経験値に関係ない。したがって、ソート順にタスクをこなせばお金を最大化できる。合宿前後にこなすタスクの集合さえ決めてしまえば、それぞれは上式でソートしてよい事がわかる。合宿の前後に振り分けるさて、タスクをこなすべき順番が決まったので、これらを合宿前後に振り分けることを考えよう。思いつくのは、合宿前に配ったタスクの数と、もらった経験値を状態にした次のDP(☆)だろう。しよう...だが、タスクを合宿後に配ったとき、そのときにもらえるべきお金は【合宿直前での経験値の合計】が分かっていないと計算できないことに気づく。程度となり、計算が間に合わない。別の方法を考える必要がある。考えられないだろうか。答えに移る前に、以下の図を見てほしい。縦軸は経験値で、オレンジで囲った部分がもらえるお金になる。*1☆型のDPでは、お金を上図のようにタスクごとで縦に合計していた。逆に、以下の図のように横に足していくことはできないだろうか。決め打ちしておけば、どうやらできそうである。次の形のDPが考えられる。程度、DPでの遷移は。回程度の計算となり、ギリギリだが許容範囲内だろう。これらは効率順にソート済とする。Solitaire日本語につき問題文は略。Moneymanager月別アーカイブはてなブログをはじめよう!hama_DUさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。