Educational DP Contest / DP まとめコンテスト X - Tower
解法
現在、積まれているブロックの重さの総和をとします。
ここに、2種類のブロックを、どちらの順番で新しく下に置くかを考えます。
の方がより上にくる場合
の方がより上にくる場合
1つめの条件は、結局2つのブロックを乗せることにした時点で満たしていなければならないので、無視します。
ということで、それぞれの条件の2つ目を比較すると、
となり、とのうち大きい順番の方が、の許容範囲が大きくなります。
の場合、をの上に乗せたほうがよいです。
この条件を式変形すると、となるので、
結局はの昇順でブロックを並べると、その順番で上から積んでいくのが最善になります。
あとは、基本的にナップサックと同じで、
番目のブロックまで見て、重さの総和がになるようなブロックの選び方をしたときの、価値の総和の最大値
として、
(ただし、 もしくはの際は)
を計算すればよいです。
答えは、の最大値、初期化は全て0です。
感想
この問題で似たような考え方をしたので、あっさりと解くことができました。
が、証明は難しいです…(後付けで考えました)