件名の説明:
例:
インタプリタを実装します:
クラシック変形鋼切削の問題:お金を失うことをほとんどをカット
知識ポイント:動的プログラミング、パイプ切断
即ち、アレイを設定するために、改善するために、状態遷移方程式のコードの実装を得る。価格[i]は、I P、切断後のチューブの最小の長さを記憶された[i]は、iの値を格納両方アレイ。価格、チューブの長さにカットされていませんこの問題のDP配列。
分析後の状態遷移方程式は示しています。
価格[0] = 0;
価格[I] =分(P [1] +価格[I-1]、P [2] +価格[I-2]、...、P [I-1] +価格[1]、P [I] );
価格ので[i]は、すでにこれだけのコードを向上させることができ伝達方程式に従う、現在の状況下で最小です。
ピット:
初期化と状態遷移方程式を書きます
完全なコード:
//最小切断鋼 の#include <iostreamの> 使用して名前空間STD; int型のmain() { (偽の)IOSの:: sync_with_stdio; int型の長さ、MIN; //長さと最小値であり 、一方(CIN >>長さ) { int型P [長さ+ 1]; (。;; 私は=長さを<I ++が、私は= int型1)のために CIN >> P [i]は、長さの値に基づいて、質問の//意味私は 、価格[長さ+ 1] int型 // 保存各セグメント値 価格[0] = 0; // [0]は、初期化エラー防止価格を使用する ための(INT I = 1; Iは=長さ<; Iは++) { MIN = 2147483647が; //最小値が得られた場合に設定する必要があります最大値 のために(INT J = 1; J <= I; J ++) { IF(MIN> P [J] +価格[IJ]) //常にiがjの切断面の長さと後部はijを する//私は切断の最小の長さを見つける { //最小置き換える; MIN = P [J] +価格【のIJ]を 価格[I] = MINは、 } //状態遷移方程式は、説明を参照説明実装 } } 。COUTを価格<< [長さ] <<「\ N-」; 最長部分の切断//(I)の出力後に最小値 } 戻り0; }