件名の説明:
例:
インタプリタを実装します:
最も基本的な組立ラインのスケジューリング問題ではなく、さらに開始と終了の値
知識ポイント:動的プログラミング、パイプラインスケジューリング
インプリメンテーション即ち星は、状態遷移方程式の後に、回線切替の蓄積コストに記憶費やさ様々な時間、T [] [i]はiについて最初の2つのラインの[] [I]を提供向上させることができますF []は[i]は、各行iについての最小コストに格納されています。
私たちは、[] [i]はFごとに次の伝達方程式を持っていなければなりません。
F [0] [1] [0] [1] =。
F [1] [1] [1] [1] =。
F [0] [I] =分(F [0] [I-1] + [0] [I] F [1]〜[I-1] + T [1]〜[I-1] +と[ 0] [I])。
F [1]〜[I] =分(F [1]〜[I-1] +と[1]〜[I] F [0] [I-1] + T [0] [I-1] +と[ 1] [I])。
初期定義の最初の2、2つの具象変換。
分関数は、以前の値がこの行の順方向電流の正面にノードを示し、後者は別の行に、以前の遷移ノードから引き継ぎ、その後、図進むとります。このとき、2つだけの行のみ、これらの二つの状況ように、比較は、ライン位置の最小コストに到達するのを得ることができます。
ソリューション::マルチラインは、を参照することがALSそれは良いこと?(フォローするリンクを追加)
最小コストまでの時間を、ラインの最後のn(最後の家)を比較。
ピット:
メモは、アレイの初期化後に複数回入力され、状態遷移方程式を正しく変換することができます。
完全なコード:
//基本的な問題パイプラインスケジューラ の#include <iostreamの> 使用して名前空間STD; int型のmain() { (偽の)IOSの:: sync_with_stdio; int型N-; INT FEND; int型私は、 しばらく(N - >> CIN) { [2] INT N- [+ 1]、T [2] [N - ]; //これは、2本のラインをとるたびに (I = 1; I <= N; I ++)ため CIN >> [0] [I]、 のために(I = 1; I <= N - 、Iは++) CIN >> [I] [1]; 過ごした移送ライン時間の// 2つの異なる位置 のための(I = 1; Iは、N- <; I ++)は CIN >> T [0] [I]; (。; I <N-I ++はI = 1)のための [1] CIN >> T [I]; // 2つのラインの異なる位置で最小の蓄積時間 F INT [2] [N + 1 ]; //エラーを防止するために初期化する 。F [0] [1] [0]を= 1];。 。。。。F [1] [1]〜[し= 1] [1]; のための(I = 2; I <= N; I ++) { //状態遷移方程式が得参照具体的な説明を記載している ([0] [I F場合 [1]〜[I-1] + T [1]〜[I-1] -1] + [0] [i]が<F + A [0] [I]) F [0] [I] = F [0] [I-1] + A [0] [I]; 他 F [0] [I] = F [I [1] -1] + Tの[1]〜[I. 1] + A [0] [I]、。。。IF(F [1]〜[I. 1] + [1]〜[I] <F [0] [I. 1- ] + T [0] [I-1] + [1]〜[I])。 F [1]〜[I] = F [1]〜[I-1] + [1]〜[I]、。。。。 他の Fの[1。 ] [I] = F [0] [-I 1] + T [0] [-I 1] + [1]〜[I];。。。 } //二行は、それぞれ前回計算され、それは、最小値を取得するのにかかる (IF F [0] [N- <F [N-])[1] [0] [N-] = FをFEND; そう = F [N-] FEND [1]、 COUTは<< << '\ N-' FEND; } リターン0; }