最佳调度问题_分支限界法
最佳调度问题
【问题描述】
假设有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 }
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!