-1

長さ n インチの棒が与えられます。整数の長さのさまざまな部分に切り取ることができます。あなたの目標は、可能なすべての部分の長さの積を最大にすることです。少なくとも 1 つのカットを作成する必要があります。ロープの長さは 2 メートル以上と仮定します。参考:https ://www.geeksforgeeks.org/maximum-product-cutting-dp-36/

その他の参考文献:ロッドをカットして利益を最大化するためのアルゴリズム

2Dテーブルを使用したボトムアップの動的計画法を使用して、この質問を行いたいです。

長さが 5 であるとします。

                       Length of rod
                [1]   [2]   [3]   [4]   [5]
          [0]    0     0     0     0     0  
Number of [1]    0     1     2     4     6
cuts      [2]    0     1     2
          [3]    0

各セルは、特定の長さのロッドで指定されたカット数で得られる最大製品と、カット後に残った最大長を示します。

たとえば、セルにカット数 2 とロッドの長さ 4 を入力する必要があるとします。各セルには、特定の長さの最大製品を格納するだけでなく、カット後に残った最大の長さも格納すると仮定します。

長さ 4 を 1 回カットした後、左部分を 2 に、右部分を 2 にカットするため、最大積は 4 になります。最大積の 4 と最大部分の 2 の 2 つの数値を保存します。セル (2, 4) にいるときは、カットできるかできないかのどちらかです。カットを行わない場合は、現在の行を調べます。そして、それぞれの長さをループします。この場合、長さ 2 と長さ 3 をループします。長さが 2 の場合は、残りの 4-2=2 があり、乗算して 4 を取得します。次に、残りの長さを取得するために 3 で同じことを行います。を 1 にして、これに 2 を掛けると 2 になります。

もう 1 つのオプションは、カットを行うことです。次に、上の行を確認する必要があります。また、その行の先頭からループします。次に、最大値を選択します。

私の問題は、すべての列をループするたびに、つまり左から現在のセルまでループする必要があることです。これにより、時間の複雑さが O(n^3) になります。

2D テーブルを使用する代わりに O(n^2) でこれを行う方法はありますか?

4

1 に答える 1