【回溯算法】最佳调度问题

2021/6/3 1:23:51

本文主要是介绍【回溯算法】最佳调度问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

算法实现题 5-15 最佳调度问题

问题描述:假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。

算法设计:对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。

输入:给出输入数据。第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。

输出:将计算出的完成全部任务的最早时间输出

输入
7  3
2  14  4  16  6  5  3
输出
17

按照书上解答书给的函数写的。做了一点点的更改。

 

#include <bits/stdc++.h>
using namespace std;

int n,k;
int a[999];
int len[999];//记录当前晚上前i个任务需要的时间 
int best=999;//记录最小的时间 

void backtrack(int dep) {
	if(dep==n) {
		int tmp=0;
		for(int i=0; i<k; i++) {
			if(len[i]>tmp)
				tmp=len[i];//找出k个机器中时间最长的 
		}
		if(tmp<best)//如果时间小于之前的best,更新数据 
			best=tmp;
		return ;
	}
	for(int i=0; i<k; i++) {
		len[i]=len[i]+a[dep];
		if(len[i]<best)
			backtrack(dep+1);
		len[i]=len[i]-a[dep];//回溯 
	}
}

int main() {
	cin>>n>>k;
	for(int i=0; i<n; i++)
		cin>>a[i];
	backtrack(0);
	cout<<best<<endl;
	return 0;
}
/*
输入
7 3
2 14 4 16 6 5 3
输出
17
*/

 



这篇关于【回溯算法】最佳调度问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程