最佳调度问题_分支限界法

最佳调度问题
【问题描述】
       假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。
【编程任务】
       对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。
【输入样例】
7  3
2  14  4  16  6  5  3
【输出样例】
  17

即此问题为七个任务,三台机器。

首先列个七乘三的二维数组了解算法思路:

 

我们知道回溯法其实是穷举法加剪枝函数,我们的函数用到递归,层层返回。一共七层,每层的除去叶子节点都有三个孩子

每搜索到叶子节点就更新一次maxnum值(小于maxnum则更新)(初值为一个较大的数),是用一次搜索结束后三个机器中花费时间最长的机器的所用时间作为此次分配的所用时间,。

 

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k;
 4 int x[100];//机器
 5 int x1[100];//作业
 6 int maxnum=1000000;
 7 
 8 void task(int level)
 9 {
10     if(level>n){
11      int temp=0;
12      for(int i=1;i<=k;i++){
13         if(x[i]>temp){
14             temp=x[i];
15         }
16      }
17      if(temp<maxnum){
18         maxnum=temp;
19      }
20     }
21     else{
22         for(int i=1;i<=k;i++){
23             x[i]+=x1[level];
24             task(level+1);
25             x[i]-=x1[level];
26         }
27     }
28 }
29 int main()
30 {
31     cin >> n;
32     cin >> k;
33     for(int i=1;i<=n;i++){
34         cin >>x1[i];
35     }
36     task(1);
37     cout << maxnum;
38     return 0;
39 }

复制代码

 

posted @   你的雷哥  阅读(9583)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示