No.029 D
後で捨てられる数字を置く意味はない. よって, 個の数字の中で最後の状態で木に何個残るようにするかを考える. この数を とすると, 残す数字は明らかに上位 個を選ぶのが最適である. そして 個を木に残すようにするやり方は必ずあるので, 入れる順番は考えなくてもいい.
また, 個数字を木に残すということは, 木からはすでにある数字から 個が捨てられるということである. 捨てる数字は ならば1番の木で決まりである. ならば1番の木と, それにつながっている木のどれかであり, その中の最小の数字を捨てるのが最適である.
このように1番の木から連結になるように 個の数字をその合計が最小になるように選ぶのが最適な捨て方となる.
番の木とその子孫から 個を連結になるように選んだときの合計の最小値を としてこれを番号の大きい木から順番に更新していく.
このとき, の最大値は 番の木の自分を含む子孫の数であり, ここで枝刈りをしておかないと間に合わなくなる.
最後に を の範囲で動かして, 木に残る合計数値の最大値を求める.