タイトル:ここで、nはロープの長さであり、ロープは、セグメントMに切断してください(Mおよびnは整数であり、nは> 1およびM> 1)各ロープの長さをkと呼ばれている[0]、K [1 ]、···、K [m]は、K [0] * K [1] * ... * K [m]は、最大の可能な製品はどのくらいですか?例えば、ロープ8の長さは、我々は三つの部分、この時点で得られた生成物2,3,3の長さに、それを切断した場合、最大18です。
ダイナミックプログラミング
常に問題を解決するために最小から始め、問題のストレージサブ最適解は、(一次元または二次元アレイ)ダウン解決されており、徐々に大きな問題を解決する結合の問題に対する次善のソリューション。
動的なプログラミング機能:
- 対象問題は、最適解を求める問題である:対象問題は、セグメントの製品を見つけることであるロープの最大長さをカット
- 最適解は、各サブ問題以降の全体的な問題に対する最適解である:私ははさみの第1の位置では、ロープiは、NIに分割され、同じIおよびNiのための方法の最適化、それぞれ、セグメントに切断...以下のように...
- 4分は、2つの2を与えるための第2のブレードナイフ第4及び6に、第一ロープ10の長さとします問題は小さな問題の多数に分割され、重複するより小さなサブ問題との間の小さな問題があります;第三のブレード6分、2及び4は、その後持って...... F(2)問題の共通サブF(4)Fとは、(6)の
- 問題の下の分析に上から、下から上の問題を解決するために:部分問題の繰り返しを避けます
貪欲アルゴリズム
各ステップは、あなたが最適解を得ることができ、この選択に基づいて、貪欲な選択をすることができます。
ロープ10の長さは、例えば、残差が依然としてロープ3、切断部3の長さよりも大きい場合、ロープの長さは、切断部3の長さが3より大きい場合......ロープの残りの長さが3未満になるまで継続
//ダイナミックプログラミング
F(N)= MAX(F(I)* F(NI))、0 <iがnを<
問題を回避するために(3)を(5)(4)、F、Fを得る(2)、F、Fを得るために、繰り返し......
場合ロープ2の長さときに2つのだけはさみ1 ===> F(2)= 1。
時ロープ3の長さは、セクション2、及び切断することができる、または三つのセグメントのセクション> 1 * 2> 1 * 1 * 1 ===> F 1 ===(3)= 2
{ソリューションクラス パブリック: INT maxProductAfterCutting_solution(INT長さ){ (長さ<2)IF { 0を返す; } (長さ== 2)IF { リターン1; } IF(長さ== 3) { リターン2; } //サブ製品アレイにおける最適解ストレージ問題 INT * =製品新しい新しいINT [長さ+ 1]; 製品[0] = 0; 商品[1] = 1; 生成物[2] = 2; 商品= 3 [3]。 //生成物[i]はロープの長さの最大セグメント長の積のi番目の要素は、I、F(I)のセグメントに切断された意味 INT最大= 0。 [J]各jについて// Iを求める前に、F(j)はアウト解決されている、その結果を製品に格納されている 以下のために(INT 4 = I; Iは=長さ<; Iは++) { //全ての可能なF(J)* F(IJを決定する ) と最大値と比較 最大= 0; 。(INT のために1 = J; J = I / 2、J ++) { int型TMP =商品[J] *商品[I - J]; IF(MAX <TMP) { MSX = TMP; } 商品[I] =マックス; } } マックス=商品[長さ]。 []製品を削除し、 最大を返します; } };
//貪欲アルゴリズム
場合N> = 5、ロープ3の長さを切断する限り、場合ロープ4の残りの長さ、ロープの2つの長さは、ロープ2を切断
{ソリューションクラス パブリック: INT maxProductAfterCutting_solution(INT長さ){ (長さ<2)IF { 戻り0; } (長さ== 2)IF { リターン1; } IF(長さ== 3) { リターン2; } //作りますロープ部3の多くの切断長とり得る INT長= timesOf3 / 3と、 ロープの長さは、最後の4残りとき//場合:*> 1 2 * 2は、長さ2のロープ2を切断3 IF((長さ- timesOf3 * 3)== 1) { timesOf3 - = 1; } int型timesOf2 =(長さ- timesOf3 * 3)/ 2。 //パワーyに戻すX。 リターン((INT)(POW(3、timesOf3))*(INT)(POW(2、timesOf2))); } };