#include <iostream>
#include <cstdio>
using namespace std;
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MAXSIZE 10
#define INF 999999999
struct Job_Info
{
int t1, t2;
}job[MAXSIZE];
int n; //作业数量
int solu[MAXSIZE]; //调度次序
int optimalValue; //最优值
int optimalSolu[MAXSIZE]; //最优解
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
//time1,time2分别为机器1和机器2的完成处理时间
//totalTime为已完成作业的时间和
void Backtrack(int k, int time1, int time2, int totalTime)
{
int i;
if (k >= n)
{
for (i = 0; i < n; i++)
{
optimalSolu[i] = solu[i];
}
optimalValue = totalTime;
}
else
{
for (i = k; i < n; i++)
{
//计算完成第i个任务后,两机器的时间
int nextTime1 = time1 + job[solu[i]].t1;
int nextTime2 = MAX(nextTime1, time2) + job[solu[i]].t2;
//已完成作业的时间和是否小于最优值
if (totalTime + nextTime2 < optimalValue)
{
Swap(solu[k], solu[i]);
Backtrack(k+1, nextTime1, nextTime2, totalTime+nextTime2);
Swap(solu[k], solu[i]);
}
}
}
}
int main(void)
{
int i;
for (i = 0; i < MAXSIZE; i++)
{
solu[i] = i;
}
while (scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++)
{
scanf("%d%d", &job[i].t1, &job[i].t2);
}
optimalValue = INF;
Backtrack(0, 0, 0, 0);
printf("optimal value: %d\n", optimalValue);
printf("optimal solution: ");
for (i = 0; i < n-1; i++)
{
printf("%d ", optimalSolu[i]+1);
}
printf("%d\n", optimalSolu[i]+1);
}
return 0;
}
相关推荐
批处理作业调度问题(回溯法)
批处理作业调度问题(回溯法) 批处理作业调度问题是一个经典的组合优化问题。给定n个作业,每个作业在两台机器上的处理时间分别为M[i][1]和M[i][2],目标是找到一个最优调度序列,使得所有作业在两台机器上的完成时间之和最小。回溯法通过系统地搜索所有可能的调度方案,并利用剪枝策略来减少搜索空间,最终找到最优解。
独立任务最优调度问题(C++)
编译环境:Dev-C++ 用动态规划算法设计独立任务最优调度问题解决方案并实现,并分析算法复杂性。
流量特征工程实战:基于Python脚本的CIC-FlowMeter批量自动化处理
本文详细介绍了如何利用Python脚本对CIC-FlowMeter工具进行批量自动化封装,实现从海量PCAP文件中高效提取流量特征并生成CSV文件。通过构建健壮的自动化流水线,解决了手动处理效率低下、易出错的问题,并分享了并行处理、错误处理等关键优化技巧,助力网络流量分析与机器学习数据预处理工作。
codeup26826_最佳调度问题
codeup26826_最佳调度问题 时空限制 1000ms/128MB 问题描述 假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法找出完成这n个任务的最佳调度,使得完成全部任务的时间最早。 编程任务 对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程计算完成这n个任务的最佳调度。 输入格式 由文...
Springboot(五十六)SpringBoot3集成SkyWalking
Dskywalking.collector.backend_service:表示skywalking的collector服务的IP及端口。注意上图中红框标注的位置,我们可以根据启动Springboot项目启动时候控制台输出的ID进行筛选。注意上图中红框标注的位置,我们可以根据启动Springboot项目启动时候控制台输出的ID进行筛选。其他的版本的 APM 地址(这个我不需要,我们是在docker中部署的,留给有需要的同学)其他的java 版本的 Agents 地址。
华为ITR流程实战指南:从设计到落地的全流程解析(附完整方案下载)
本文深度解析华为ITR流程从设计到落地的全流程实战指南。ITR不仅是高效处理客户问题的“救火”系统,更是驱动产品改进、预防问题的企业“免疫系统”。文章详细拆解了流程设计的四步走策略、三层技术支持体系的组织保障、以闭环改进为核心的考核激励,并探讨了如何借鉴其精髓,优化自身问题管理,实现从被动响应到主动服务的跨越。
C++ 算法设计与分析中作业调度问题
问题: 作业调度: 如果在单处理器上,有 n 个运行时间分别为 t1,t2,t3, …, tn的已知作业,请考 虑它们的调度问题。这些作业可以按任意顺序执行,一次只能执行一个作业。 要求: (1)安排一个调度计划,使得所有的作业在系统中花费的时间最少 (一个作业在系统中花费的时间是该作业用于等待的时间和用于运行的时间的总和。) 思路:按照作业运行时间递增的顺序进行调度(运行时间一样,按照id递增的顺序进行调度 为该问题设计一个贪婪算法; (2)分析该贪婪算法是否总是能产生最优解? 代码中用到的部分知识.
售货机非现金支付开发指南:MDB协议下VPOS刷卡器的那些坑
本文深入探讨了MDB协议下非现金支付设备的开发实践,重点解析了NAYAX VPOS刷卡器的集成难点与解决方案。从RS232通信参数配置到Always idle功能实现,提供了一套完整的售货机支付系统开发指南,帮助开发者规避常见陷阱,提升设备兼容性与交易稳定性。
【JobScheduling】C++调度算法详解与实现
作业调度算法是操作系统中的一个关键组成部分,它负责确定哪个作业应该在何时执行。这些算法的选择会直接影响系统的性能和用户体验。本博客将深入研究并分析三种经典的作业调度算法,为读者提供对这一主题的全面理解。在这之前,先需要了解作业调度中几个参数:提交时刻、执行时间、开始时刻、周转时间、周转系数等。设作业Jii12nJii12...n的提交时刻为tsit_{si}tsi,执行时间为trit_{ri}tri,作业完成时刻为toit_{oi}toi。
望获实时Linux与国产芯片协同:打造LinuxCNC数控机床的全栈国产化方案
本文探讨了如何通过望获实时Linux与飞腾、龙芯等国产芯片的深度协同,为LinuxCNC数控机床打造全栈国产化方案。望获实时Linux通过中断隔离等核心技术,提供亚微秒级确定性响应,解决了传统Linux系统实时性不足的痛点,使LinuxCNC得以稳定驱动高精度机床。该方案实现了从硬件、操作系统到应用软件的全栈自主可控,为工业控制领域提供了高性能、可定制的国产化选择。
newman的使用
Newman是一个基于Node.js的postman命令行工具,用于运行和测试PostmanAPI 请求的集合。它允许用户在命令行环境中执行Postman的JSON文件,从而实现接口自动化测试和持续集成,同时支持用户进行自动化测试、批量执行请求、生成报告等操作。
批处理作业调度问题 ——回溯法详解
1、问题描述 每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和 2、简单描述 对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小。 区别于流水线调度问题: 批处理作业调度旨在求出使其完成时间和达到最小的最佳调度序列; 流水线调度问题旨在求出使其最后一个作业的完成时
手把手教你学simulink(8.2)--simulink的实战案例:信号分析
通过以上步骤,你已经成功使用 Simulink 对信号进行了频谱分析和时域分析,提取了信号的有用信息。这个案例展示了如何创建 Simulink 模型、添加和连接模块、设置仿真参数、运行仿真以及分析结果。希望这个案例能帮助你更好地理解和使用 Simulink 进行信号分析。
【回溯法】--批处理作业调度
【回溯法】--批处理作业调度1、问题描述 每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和2、简单描述 对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小...
Xilinx_JESD204B
Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
批处理作业调度问题 (回溯法)
【问题】n 个作业{1, 2, …, n}要在两台机器上处理,每个作业必须先由机器 1 处理,再由机器 2 处理,机器 1 处理作业i所需时间为 ai,机器 2 处理作业 i 所需时间为 bi(1 ≤ i ≤ n),批处理作业调度问题(batch-job scheduling problem)要求确定这 n 个作业的最优处理顺序,使得从第 1 个作业在机器 1 上处理开始,到最后一个作业在机器 2 上处理结束所需时间最少。
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
批处理作业调度问题【回溯法】
1 问题重述 给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和,称为该作业调度的完成时间和。即F12+F22+F32+…+Fn2 简单描述: 对于给定的n个作业,指定最佳作...
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
回溯法 批处理作业调度_回溯法——批处理作业调度
问题描述:给定n个作业的集合J=(J1,J2,... ,Jn)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和。简单描述:对于给定的n个作业,指定最佳作业调度方案,使其完成时间...
回溯法 批处理作业调度_算法设计与分析——批处理作业调度(回溯法)
之前讲过一个相似的问题流水作业调度问题,那一道题最开始用动态规划,推到最后得到了一个Johnson法则,变成了一个排序问题,有兴趣的可以看一下https://www.cnblogs.com/wkfvawl/p/11667092.html一、问题描述给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,...
回溯法 批处理作业调度_批处理作业调度(回溯法)
1.问题描述:给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和,称为该作业调度的完成时间和。即F12+F22+F32+…..+Fn2简单描述:对于给定的n个作业,指定最佳作...
回溯法——批处理作业调度
问题描述: 给定n个作业的集合J=(J1,J2,... ,Jn)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和。 简单描述: 对于给定的n个作业,指定...
Java批处理调度_批处理作业调度问题·回溯法·java版
问题描述:/*************************************************************批处理作业调度给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间...
几种作业调度问题总结
★流水作业调度(动态规划) ★多机调度问题 (贪心算法) ★批处理作业调度 (回溯法)
【算法设计与分析】回溯法:装载问题与批处理作业调度问题
1、装载问题的问题提出是,有一批共n个集装箱要装上2艘载重量分别为 和 的轮船,其中集装箱i的重量为 ,且 。问是否有一个合理的装载方案能将这n个集装箱装上这两艘轮船。 设n=4, =10, =12, w={5, 2, 1, 3}。采用回溯法解决该装载问题,并回答以下问题: 1)如何定义装载问题解空间?如何组织装载问题的解空间结构? 1.定义问题的解空间 首先定义问题的解空间。对于有4个集装箱要装上轮船的装载问题,其解空间由长度为4的0-1向量即{(0,0,0,0),(0,0,0,1),(0,0,1,0
1007



被折叠的 条评论
为什么被折叠?



