私はこの問題の理解に取り組んでいます:
X と Y の寸法 (X と Y は正の整数) の長方形の布と、その布を使用して作成できる n 個の製品のリストが与えられます。[1,n] の各製品 i について、寸法 ai x bi の布の長方形が必要であり、製品の最終販売価格が ci であることを知っています。ai、bi、および ci はすべて正の整数であると仮定します。長方形の布を縦または横に 2 つに切断できる機械があります。X x Y の布を裁断して得られる布から作られた製品の販売価格の合計が最大になるようにするための最適な戦略を見つけるアルゴリズムを設計します。特定の製品のコピーを好きなだけ自由に作成できます。必要に応じてコピーを作成することもできません。
私は実際に動的計画法ソリューションをすでに適切に実装していますが、問題に対する単純なソリューションが指数時間で実行される理由を理解/証明するのに苦労しています。これは、そもそも指数アルゴリズムの理解が不足していることを示していると思いますが、今のところ、上記の場合に最も関心があります。
動的プログラミング ソリューションを使用すると、既に行った作業をメモ化することで作業を節約できることを理解しています。動的計画法の実行時間は、O((W*H)(n+w+h)) または O(n^3)/多項式であると想定されています。これは、布片の幅と高さをそれぞれ可能な限り試しているためです。そして、布片の可能な幅と高さごとに、可能な縦、横、およびピースサイズのカットをそれぞれ試します. (時間の複雑さで n が必要な理由についても少し混乱していますが、考えられるすべての水平および垂直カットを試してみると、可能なすべてのピースも試す必要があるためです)。
メモ化をオフにすると、力ずくの方法が得られ、ツリー全体を解決する必要があります。これは、多項式または O(2^n) であると想定されています。なんで?O(2^n) 時間の複雑さを持つアルゴリズムは、二分木で表現できるはずではありませんか? この問題に対する素朴な解決策はバイナリではないようです。