任务最优调度
标题:任务最优调度 | 时间限制: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;
}
