NOIP 2006 作業排程方案

2022-05-28 03:39:11 字數 2723 閱讀 2144

我們現在要利用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 工序2

1 1/3 2/2

2 1/2 2/5

3 2/2 1/4

則對於安排順序「1 1 2 3 3 2」,下圖中的兩個實施方案都是正確的。但所需要的總時間分別是10與12。

當乙個操作插入到某台機器的某個空檔時(機器上最後的尚未安排操作的部分也可以看作乙個空檔),可以靠前插入,也可以靠後或居中插入。為了使問題簡單一些,我們約定:在保證約束條件(1)(2)的條件下,盡量靠前插入。並且,我們還約定,如果有多個空檔可以插入,就在保證約束條件(1)(2)的條件下,插入到最前面的乙個空檔。於是,在這些約定下,上例中的方案一是正確的,而方案二是不正確的。

顯然,在這些約定下,對於給定的安排順序,符合該安排順序的實施方案是唯一的,請你計算出該方案完成全部任務所需的總時間。

輸入格式:

輸入的第1行為兩個正整數,用乙個空格隔開:

m n (其中m(<20)表示機器數,n(<20)表示工件數)

第2行:個用空格隔開的數,為給定的安排順序。

接下來的2n行,每行都是用空格隔開的m個正整數,每個數不超過20。

其中前n行依次表示每個工件的每個工序所使用的機器號,第1個數為第1個工序的機器號,第2個數為第2個工序機器號,等等。

後n行依次表示每個工件的每個工序的加工時間。

可以保證,以上各資料都是正確的,不必檢驗。

輸出格式:

輸出只有乙個正整數,為最少的加工時間。

輸入樣例#1: 複製

2 3

1 1 2 3 3 2

1 2

1 2

2 13 2

2 5

2 4

輸出樣例#1: 複製

10

noip 2006 提高組 第三題

這題是乙個純模擬,不要想歪了qaq(dp?不存在的)。非常考驗碼力的一道題。(我不會告訴你我做了將近3個多小時233)。被各種細節卡真的好煩。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int n=20+5;9

const

int m=400+5;10

intn,m;

11 inline int

read()

1217

while(c>='

0'&&c<='9'

)18

19return ret*f;20}

21int

num[m];

22int

s[n][n],t[n][n];

23int

kd[m][m],ks[m][m],tim[n],js[n],pro[n];

24int

tot[n];

25void cha(int mec,int

pos)

2633}34

void

solve()

3551

else

5270 flag=1

;71 pro[rw]+=t[rw][gx];

72break;73

}74}75

if(!flag)//

找不到空擋

7680}81

}82}83

intmain()

8490

for(int i=1;i<=n;i++)

9196}97

for(int i=1;i<=n;i++)

98103

}104

solve();

105int ans=0

;106

for(int i=1;i<=m;i++)

107 ans=max(ans,tim[i]);

108 printf("

%d\n

",ans);

109return0;

110 }

NOIP 2006 作業排程方案

題目描述 我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。每個工件的每個工序稱為乙個操作,我們用記號j k表示乙個操作,其中j為1到n中的某個數字,為工件號 k為1到m中的某個數字,為工序號,例如2 4表示第2個工件...

NOIP2006T 作業排程方案

問題描述 我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。一方面,每個操作的安排都要滿足以下的兩個約束條件。1 對同乙個工件,每道工序必須在它前面的工序完成後才能開始 2 同一時刻每一台機器至多只能加工乙個工件。另一...

NOIP2006 金明的預算方案

1 金明的預算方案 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不 超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主...