這題網上的各個題庫都不完整,完整的我發一次:
題目的原描述如下,rqnoj和vijos的題目都不完全,少了一幅,**也不清晰。。
【問題描述】
我們現在要利用
m臺機器加工
n個工件,每個工件都有
m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。
每個工件的每個工序稱為乙個操作,我們用記號
j-k表示乙個操作,其中j為
1到n中的某個數字,為工件號;k為
1到m中的某個數字,為工序號,例如
2-4表示第
2個工件第
4道工序的這個操作。在本題中,我們還給定對於各操作的乙個安排順序。
例如,當
n=3,
m=2時,「
1-1,
1-2,
2-1,
3-1,
3-2,
2-2」
就是乙個給定的安排順序,即先安排第
1個工件的第
1個工序,再安排第
1個工件的第
2個工序,然後再安排第
2個工件的第
1個工序,等等。
一方面,每個操作的安排都要滿足以下的兩個約束條件。
(1)
對同乙個工件,每道工序必須在它前面的工序完成後才能開始;
(2)
同一時刻每一台機器至多只能加工乙個工件。
另一方面,在安排後面的操作時,不能改動前面已安排的操作的工作狀態。
由於同一工件都是按工序的順序安排的,因此,只按原順序給出工件號,仍可得到同樣的安排順序,於是,在輸入資料中,我們將這個安排順序簡寫為「
1 1 2 3 3 2」
。還要注意,「安排順序」只要求按照給定的順序安排每個操作。不一定是各機器上的實際操作順序。在具體實施時,有可能排在後面的某個操作比前面的某個操作先完成。
例如,取
n=3,m=2
,已知資料如下:
工件號機器號
/加工時間工序1
工序211/3
2/22
1/22/5
32/2
1/4則對於安排順序「
1 1 2 3 3 2」
,下圖中的
兩個實施方案都是正確的。但所需要的總時間分別是10與
當乙個操作插入到某台機器的某個空檔時(機器上最後的尚未安排操作的部分也可以看作乙個空檔),可以靠前插入,也可以靠後或居中插入。為了使問題簡單一些,我們約定:在保證約束條件(1)(
2)的條件下,盡量靠前插入。並且,我們還約定,如果有多個空檔可以插入,就在保證約束條件(1)(
2)的條件下,插入到最前面的乙個空檔。於是,在這些約定下,上例中的方案一是正確的,而方案二是不正確的。
顯然,在這些約定下,對於給定的安排順序,符合該安排順序的實施方案是唯一的,請你計算出該方案完成全部任務所需的總時間。
【輸入檔案】
輸入檔案jsp.in 的第1
行為兩個正整數,用乙個空格隔開:
m n(其中m(
<20
)表示機器數,n(
<20
)表示工件數)第2
行:個用空格隔開的數,為給定的安排順序。
接下來的
2n行,每行都是用空格隔開的
m個正整數,每個數不超過20。
其中前n
行依次表示每個工件的每個工序所使用的機器號,第
1個數為第
1個工序的機器號,第
2個數為第
2個工序機器號,等等。後n
行依次表示每個工件的每個工序的加工時間。
可以保證,以上各資料都是正確的,不必檢驗。
【輸出檔案】
輸出檔案jsp.out只有
乙個正整數,為最少的加工時間。
【輸入樣例】
2 31 1 2 3 3 2
1 21 2
2 13 2
2 52 4
【輸出樣例】
10******************************==華麗的分割線 ******************************==
因為每個資料都滿足要求,所以沒太多演算法成分,就是按照題目要求的模擬,不說多了,上**:
#include #include int num[361];int machine[19][362];
int used[19], order[19][19];
int last[19];
int time[19][19];
int max[19];
int main(int argc, char **ar**)
for(i = 0; i < n; i++)
} for(i = 0; i < n; i++)
} for(i = 0; i < m * n; i++)else
} for(l = 1; l <= count; l++)
last[num[i]] = j;
used[num[i]]++;
if(max[k] < j)
} for(i = 0; i < m; i++)
} printf("%d\n", ans);
return 0;
}
作業排程方案
題目描述 description 我們現在要利用 m臺機器加工 n個工件,每個工件都有 m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。每個工件的每個工序稱為乙個操作,我們用記號 j k表示乙個操作,其中j為 1到n中的某個數字,為工件號 k為 1到m中的某個數字...
作業排程方案
我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。每個工件的每個工序稱為乙個操作,我們用記號j k表示乙個操作,其中j為1到n中的某個數字,為工件號 k為1到m中的某個數字,為工序號,例如2 4表示第2個工件第4道工序...
作業排程方案
題目描述 我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。每個工件的每個工序稱為乙個操作,我們用記號j k表示乙個操作,其中j為1到n中的某個數字,為工件號 k為1到m中的某個數字,為工序號,例如2 4表示第2個工件...