题意:

1205 流水线调度

N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为a[i]和b[i]。你可以安排每个作业的执行顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。求这个最少的时间。

输入
第1行:1个数N,表示作业的数量。(2 <= N <= 50000)
第2 - N + 1行:每行两个数,中间用空格分隔,表示在M1和M2上加工所需的时间a[i], b[i]。(1 <= a[i], b[i] <= 10000)。

输出
输出完成所有作业所需的最少时间。

输入样例
4
3 7
2 1
1 1
4 2

输出样例
14

思路:

流水线调度问题的Johnson算法:

(1)令N1={i|ai<bi},N2={i|ai>=bi};

(2)将N1中作业按ai的非减序排序;将N2中作业按bi的非增序排序;

(3)N1中作业接N2中作业构成满足Johnson法则的最优调度。

代码实现:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 6;
struct node{//N1int a,b;
}G[maxn];
struct node1{//N2int a,b;
}E[maxn];
bool cmp1(node xx,node yy){//N1中作业按ai的非减序排序return xx.a < yy.a;
}
bool cmp2(node1 xx,node1 yy){//将N2中作业按bi的非增序排序;return xx.b > yy.b;
}
int main(){int n;scanf("%d",&n);int x,y;int cnt = 0;int num = 0;for(int i = 1;i <= n;i++){scanf("%d%d",&x,&y);if(x < y){//集合1:N1={i|ai<bi}G[++cnt].a = x;G[cnt].b = y;}else{//集合2:N2={i|ai>=bi};E[++num].a = x;E[num].b = y;}}sort(G + 1,G + 1 + cnt,cmp1);//N1中作业按ai的非减序排序sort(E + 1,E + 1 + num,cmp2);//将N2中作业按bi的非增序排序;int ans = 0;int c1 = 0,c2 = 0;for(int i = 1;i <= cnt;i++){//先做N1中的作业c1 += G[i].a;ans = max(c1,ans);ans += G[i].b;}for(int i = 1;i <= num;i++){//再做N2中的作业c1 += E[i].a;ans = max(c1,ans);ans += E[i].b;}printf("%d\n",ans);return 0;
}

插入大佬的链接:

[流水线调度问题详解]

DP_流水线调度问题与Johnson算法相关推荐

  1. 动态规划作业排程java_动态规划之流水线作业(Johnson算法)

    该题题目为: 设有n个作业要在2台机器M1和M2 组成的流水线上完成加工.每个作业加工的顺序都是现在M1 上加工,然后在M2 上加工,所需时间分别为ai和bi.流水作业调度问题要求求加工完这些作业所需 ...

  2. 加工生产调度(流水作业调度问题)——Johnson算法应用

    题目链接: linklink link 从分析到解决 (从看题到放弃) Step1 题意理解 简化下题目: nnn个作业,在M1, M2" role="presentation&q ...

  3. 加工生产调度(Johnson算法 双机流水作业调度问题)

    加工生产调度 题目描述: 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n ...

  4. poj 2751 双机调度问题Johnson算法(贪心)

    题意: 2台机器,n件任务,每件任务必须先在S1上做,再在S2上做.任务之间先做后做任意.求最早的完工时间. 分析: 这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的 ...

  5. 算法导论——所有点对最短路径:稀疏图Johnson算法

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.graph;import org.loda.structure.Stack; import ...

  6. 所有结点对的最短路径问题之Johnson算法

    Johnson算法可以在O(V*V lgV + VE)的时间内找到所有节点对之间的最短路径,对于稀疏图来说,算法的渐进表现要由于重复平方法和FloydWarshall算法,如果图没有权值为负值的环路, ...

  7. 稀疏图Johnson算法

    在前面的文章<所有节点对的最短路径问题>中,我们介绍了用于稀疏图的Johnson算法,由于代码比较长,我们将其单独放在一篇文章之中. Johnson算法的时间复杂度在使用二叉堆作为最小优先 ...

  8. 【技巧】浅谈Johnson算法

    简介 Johnson算法主要用于求稀疏图上的全源最短路径.其主体思想是利用重赋权值的方法把一个原问题带负权的图转化为权值非负的图.然后再使用N次Dijkstra算法以求出全源最短路. --姜碧野< ...

  9. 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)

    图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...

  10. 【图论】Johnson算法(多源最短路优化)

    样例题的话随便找个Floyd算法自己测一下吧,下面上封装后的Johnson板子: (好啦-既然你们懒那我给你们找个吧..AcWing.854) 链接:https://www.acwing.com/pr ...

最新文章

  1. 格式化json日期'/Date(-62135596800000)/'
  2. 区块链还能赚钱吗 区块链挖矿赚钱吗
  3. 费用保险单,如何失焦时自动补零
  4. 办公电脑变买为租,“企业惊变”背后神秘推手
  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数引擎 vs rand 函数
  6. __nonnull((1)) 未完待续
  7. java并发库之Executors常用的创建ExecutorService的几个方法说明
  8. 多线程之-并发任务间交换数据
  9. python if else_菜鸟笔记015 Python If ... Else
  10. python处理时间序列非平稳_推荐 :手把手教你用Python处理非平稳时间序列(附代码)...
  11. 蓝色对比关系图表合集PPT模板
  12. 2.1用户界面设计的八项黄金法则
  13. 移动端自动化任务-AutoJs Pro v9使用教程(一)
  14. 阿里资深技术专家:如何对复杂的业务系统进行解耦和重构?
  15. 好好说话之Tcache Attack(3):tcache stashing unlink attack
  16. 首钢股份——超低排放排头兵
  17. 华兴数控g71外圆循环编程_华兴数控的循环指令是怎么定义的。也就是G71。G72。那样的。...
  18. mysql 1264_关于MySQL的1264错误处理及sql_mode设置
  19. 张驰杭州电子科技计算机学院,计算机学院举办“图灵教育计划”电子信息科学与技术专业交流会...
  20. ValueError: With n_samples=1, test_size=0.2 and train_size=None, the resulting train set will be emp

热门文章

  1. 适于硬件实现的中值滤波算法
  2. QT 透明 半透明 效果
  3. 《九阴真经:iOS黑客攻防秘籍》新书发布
  4. 一周新闻纵览:谷歌浏览器信息泄露,出卖个人信息获利终落网,严查App偷窥乱象
  5. 【基础数学】Jensen不等式
  6. norton服务器 位置,逐步配置企业版Symantec Norton防病毒服务器
  7. bp神经网络模型拓扑结构,bp神经网络模型结构图
  8. 使用mmdetection检测并存储结果
  9. python 大智慧自定义数据_大智慧扩展数据、自定义数据.doc
  10. weblogic部署静态网页