任務排程問題

2021-10-10 17:44:31 字數 1099 閱讀 4714

乙個單位時間任務是恰好需要乙個單位時間完成的任務。給定乙個單位時間任務的有限集s。關於s 的乙個時間表用於描述s 中單位時間任務的執行次序。時間表中第1 個任務從時間0 開始執行直至時間1 結束,第2 個任務從時間1 開始執行至時間2 結束,…,第n個任務從時間n-1 開始執行直至時間n結束。具有截止時間和誤時懲罰的單位時間任務時間表問題可描述如下:

(1) n 個單位時間任務的集合s=(n≤500);

(2) 任務i的截止時間d[i],1≤i≤n,1≤d[i]≤n,即要求任務i在時間d[i]之前結束;

(3) 任務i 的誤時懲罰1≤w[i]< 1000,1≤i≤n,即任務i 未在時間d[i]之前結束將招致w[i]的懲罰;若按時完成則無懲罰。

任務時間表問題要求確定s 的乙個時間表(最優時間表)使得總誤時懲罰達到最小。

第一行是正整數 n, 表示任務數。接下來的 2 行中,每行有 n 個正整數,分別表示各任務的截止時間和誤時懲罰。

將計算出的最小總誤時懲罰輸出

7

4 2 4 3 1 4 6

70 60 50 40 30 20 10

50
解析:

貪心策略:按時完成懲罰較大的任務,當有衝突時,盡量提前完成懲罰較大的任務,若最終不能完成,則只能接受懲罰。

這裡,先將任務按照懲罰從大到小排序;然後,用時間陣列,先將任務從前往後,按照截止時間安排;

若有衝突,則往前安排;若最終不能被安排,則這個任務接受懲罰。

完整**:

#include#includeusing namespace std;

struct taskt[505];

int time[505];

bool cmp(task a, task b)

int main()

}if(flag==0) //最終沒能安排成功,接受懲罰

ans += t[i].w;

} }cout

}

問題 A 任務排程

題目描述 讀入任務排程序列,輸出n個任務適合的一種排程方式。輸入輸入包含多組測試資料。每組第一行輸入乙個整數n n 100000 表示有n個任務。接下來n行,每行第乙個表示前序任務,括號中的任務為若干個後序任務,表示只有在前序任務完成的情況下,後序任務才能開始。若後序為null則表示無後繼任務。輸出...

排程機任務排程問題

題目描述 假設有乙個 排程機,有n個任務相同的任務需要排程到m臺伺服器上執行,由於每台伺服器的配置不一樣,因此,伺服器執行乙個任務所花費的時間也不同。現在假設第i個伺服器執行乙個任務需要的時間為t i 假如,有2個執行機a與b,執行乙個任務分別需要7min和10min,有6個任務待排程。如果平分這6...

貪心 任務排程問題

問題描述 假設給定n個任務的集合t,每個任務i有啟動時間si和完成時間fi si問題分析 要求 在最少的機器上安排完所有任務。如何選擇貪心策略才能使問題的解為最優解?顯然,開始時間最早的任務需要被先執行,但是最優解要求我們使用的機器最少,因此我們每次選擇時應盡量使用相同的機器。若已使用過的機器上現處...