题目叙述:
假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。
对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1,2,…,n。设计一个优先队列式分支限界法,计算完成这n个任务的最佳调度。
给出输入数据。第1行有2个正整数n和k。第2行的n个正整数是完成n个任务需要的时间。
样例输入
7 3
2 14 4 16 6 5 3
1
2
样例输出
17
1
思路
以下例子以样例做参考
1、首先我们先假象3个time值,如下,这3个time值分别代表三个机器的工作时间。
2、然后我们知道所有的事件都必须完成,所以一个事件只有3种状态,在机器1中、在机器2中以及在机器3中。
3、所以我们分别对这三种情况进行判断,判断是否入列。
下面是代码:
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int M = 100;
const int INF = 0x3f3f3f3f;
int x[M], n, k;
int best = INF; //最佳值
struct node //定义一个node
{
int time[M]