3 1 獨立任務最優排程問題

2022-05-20 19:55:24 字數 1368 閱讀 1689

´問題描述:

用 2 臺處理機 a 和 b 處理 n 個作業。設第 i 個作業交給機器 a 處理時需要時間 i

a ,若

由機器 b 來處理,則需要時間 i

b 。由於各作業的特點和機器的效能關係,很可能對於某些 i,

有 i i

a ³ b ,而對於某些 j,j≠i,有a j < bj 。既不能將乙個作業分開由 2 臺機器處理,也

沒有一台機器能同時處理 2 個作業。設計乙個動態規劃演算法,使得這 2 臺機器處理完這 n

個作業的時間最短(從任何一台機器開工到最後一台機器停工的總時間)。研究乙個例項:

(a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2);(b1,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)。

´程式設計任務:

對於給定的 2 臺處理機 a 和 b 處理 n 個作業,找出乙個最優排程方案,使 2 臺機器處理

完這 n 個作業的時間最短。

´資料輸入:

由檔案 input.txt 提供輸入資料。檔案的第 1 行是 1 個正整數 n, 表示要處理 n 個作業。

接下來的 2 行中,每行有 n 個正整數,分別表示處理機 a 和 b 處理第 i 個作業需要的處理時

間。´結果輸出:

程式執行結束時,將計算出的最短處理時間輸出到檔案 output.txt 中。

輸入檔案示例 輸出檔案示例

input.txt output.txt

62 5 7 10 5 2

3 8 4 11 3 4

15【題解】

設f[i][j]表示前i個作業a機器用了j時間的條件下b最少花費的時間

f[i][j] = min(f[i-1][j-a[i]],f[i-1][j]+b[i]);//給a做或給b做

【**】

/*

設f[i][j]表示前i個作業a機器用了j時間的條件下b最少花費的時間

f[i][j] = min(f[i-1][j-a[i]],f[i-1][j]+b[i]);//給a做或給b做

*/#include #include #include using namespace std;

const int n = 200;

const int m = 1e4;

int f[n+10][m+10];

int n,a[n+10],b[n+10];

int main()

int ans = f[n][0];

for (int j = 1;j <= m;j++) ans = min(ans,max(f[n][j],j));

printf("%d\n",ans);

return 0;

}

獨立任務最優排程問題

題目 用2 臺處理機a 和b 處理n 個作業。設第i 個作業交給機器a 處理時需要時間i a 若由機器b 來處理,則需要時間i b 由於各作業的特點和機器的效能關係,很可能對於某些i,有ai bi,而對於某些j,j i,有aj bj 既不能將乙個作業分開由2 臺機器處理,也沒有一台機器能同時處理2 ...

獨立任務最優排程問題

用2臺處理機a和b處理n個作業。設第i個作業交給機器a處理時需要時間ai,若由機器b來處理,則需要時間bi。由於各作業的特點和機器的效能關係,很可能對於某些i,有ai bi,而對於某些j,j不等於i,有aj第一行是乙個正整數n,表示要處理n個作業。在接下來的兩行中,每行有n個正整數,分別表示處理機a...

獨立任務最優排程

include using namespace std int main int b int sum 0 for int i 0 i n i int m new int n m為b機器的使用時間,i為第幾個工作入隊,j為a機器使用時間 for int i 0 i n i for int i 0 i ...