NOIP2006T 作業排程方案

2022-08-17 10:27:21 字數 1181 閱讀 6555

問題描述

我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。

一方面,每個操作的安排都要滿足以下的兩個約束條件。

(1) 對同乙個工件,每道工序必須在它前面的工序完成後才能開始;

(2) 同一時刻每一台機器至多只能加工乙個工件。

另一方面,在安排後面的操作時,不能改動前面已安排的操作的工作狀態。

還要注意,「安排順序」只要求按照給定的順序安排每個操作。不一定是各機器上的實際操作順序。在具體實施時,有可能排在後面的某個操作比前面的某個操作先完成。約定:在保證約束條件(1)(2)的條件下,盡量靠前插入。並且,我們還約定,如果有多個空檔可以插入,就在保證約束條件(1)(2)的條件下,插入到最前面的乙個空檔。

計算出該方案完成全部任務所需的總時間。

輸入格式

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

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

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

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

其中前n行依次表示每個工件的每個工序所使用的機器號。

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

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

輸出格式

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

解題演算法

【模擬】

解題思路:

順向思維模擬即可

因為各個物品放置法則等同

所以可以用函式進行m*n次處理

每個物品找到第一段時間足以容納自身的區間,然後改變區間狀態即可

有個小細節

每次放完乙個物品後下乙個次序要從這次的尾端之後開始

很好控制的

**:int mtp=mach[id][front[id]];

int ct=tim[id][front[id]];

int sub=last[id];

while(1)

f(i,1,ct)

vit[mtp][sub+i]=1;

ans=max(ans,sub+ct);

last[id]=sub+ct;

front[id]++;

以上、ac

模擬套路大同小異,聞一知十。

以上2018.2.13

NOIP2006T 能量項鍊

描述 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠子才...

NOIP 2006 作業排程方案

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

NOIP 2006 作業排程方案

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