題目描述 某多處理器多道批處理系統一次容許將多有做業調入內存,且能並行執行,其並行數等於處理器個數。該系統採用SJF的調度方式(最短做業優先,系統在調度時,老是有限調度執行處理時間最短的做業)。 現給定處理器個數m,做業數n,每一個做業的處理時間分別爲t1, t2...tn. 當n>m時,首先處理時間短的m個做業進入處理器處理,其餘進入等待,當某個做業處理完成時,依次從等待隊列中取處理時間最短的做業進入處理。 求系統處理完全部做業的耗時爲多少? 注:不考慮做業切換的消耗。ios
輸入描述: 輸入2行,第一行爲2個整數(採用空格分隔),分別表示處理器個數m和做業數n;第二行輸入n個整數(採用空格分隔),表示每一個做業的處理時長t1, t2...tn。0<m, n<100, 0<t1, t2...tn<100。服務器
輸出描述: 輸出處理總時長spa
示例1 輸入 3 5 8 4 3 1 10code
輸出 13排序
說明 首先,執行時長爲一、三、4的做業4(cpu1)、做業3(cpu2)、做業2(cpu3)進入處理。 1個時間單元后,做業4執行結束,做業1進入處理(cpu1); 3個時間單元后,做業3執行結束,做業5進入處理(cpu1); 4個時間單元后,做業2執行結束; 9個時間單元后,做業1執行結束; 13個時間單元后,做業5執行結束。 <br><br>隊列
1.思考內存
2.實現 <br>ci
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int m, n; while ( cin >> m >> n ){ int input; vector<int> time; for (int i = 0; i < n; i++){ cin >> input; time.push_back(input); } sort(time.begin(), time.end()); int len = time.size(); int index = len % m - 1; int res = 0; for (int i = index; i < len; i = i + 3){ res += time[i]; } cout << res << endl; } return 0; }