任务最优调度
标题:任务最优调度 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限
给定一个正整型数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执行完所有任务所需的最短时间。任务执行规则如下:
1、任务可以按任意顺序执行,且每个任务执行耗时间均为1个时间单位。
2、两个同类型的任务之间必须有长度为N个单位的冷却时间,比如:N为2时,在时间K执行了类型3的任务,那么K+1和K+2两个时间不能执行类型3任务。
3、系统在任何一个单位时间内都可以执行一个任务,或者等待状态。
说明:数组最大长度为1000,数组最大值1000.#include <iostream> #include <string> using namespace std; void bubble(int task[]) { for (int i = 0; i < 1000; i++) { for (int j = i + 1; j <= 1000; j++) { if (task[j] > task[i]) { int temp; temp = task[i]; task[i] = task[j]; task[j] = temp; } } } } int main() { int task[1001] = { 0 }; int N, count = 0, ans = 0; string str; getline(cin, str); cin >> N; for (int i = 0; i < str.length(); i++) { int temp = 0; while (i < str.length() && str[i] != ',') { temp = temp * 10 + str[i] - '0'; i++; } task[temp]++; } bubble(task); while (task[0] > 0) { task[0]--; ans++; for (int i = 0; i < N; i++) { if (task[0] == 0 && task[i + 1] == 0) break; if (task[i + 1] > 0) task[i + 1]--; ans++; } bubble(task); } cout << ans << endl; return 0; }