1205 流水线调度
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

 收藏
 关注

N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为a[i]和b[i]。你可以安排每个作业的执行顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。求这个最少的时间。
Input
第1行:1个数N,表示作业的数量。(2 <= N <= 50000)
第2 - N + 1行:每行两个数,中间用空格分隔,表示在M1和M2上加工所需的时间a[i], b[i]。(1 <= a[i], b[i] <= 10000)。
Output
输出完成所有作业所需的最少时间。
Input示例
4
3 7
2 1
1 1
4 2
Output示例
14

Johnson算法:

①:将任务分为两类,A类任务先加工时间短,B类任务再加工时间短(or一样长)

②:两类任务分别排序,其中A类按先加工时间从短到长排序,B类按再加工时间从长到短排序

③:合并两类,将第二类任务接到第一类任务后面,此时任务的顺序最佳

④:遍历所有任务,计算总耗时

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct
{int a;int b;
}Task;
Task A[50005], B[50005];
bool cmpA(Task a, Task b)
{if(a.a<b.a)return 1;return 0;
}
bool cmpB(Task a, Task b)
{if(a.b>b.b)return 1;return 0;
}int main(void)
{int i, n, a, b, ans, sum, posA, posB, sumA, sumB;posA = posB = sumA = sumB = 0;scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d%d", &a, &b);if(a<b){A[++posA].a = a;A[posA].b = b;sumA += b;}else{B[++posB].a = a;B[posB].b = b;sumB += a;}}sort(A+1, A+posA+1, cmpA);sort(B+1, B+posB+1, cmpB);for(i=1;i<=posB;i++)A[++posA] = B[i];ans = A[1].a+A[1].b;sum = A[1].a;for(i=2;i<=posA;i++){sum += A[i].a;ans = max(sum, ans)+A[i].b;}printf("%d\n", ans);return 0;
}

经典问题:流水线调度(51nod)相关推荐

  1. 冲突向量求流水线调度策咯

    一.实验内容 1.根据流水线的时间周期和功能段数,输入流水线的预约表: 2.求出延迟禁止表和冲突向量: 3.构造流水线状态转移图: 4.寻找最小等间隔调度: 5.寻找最佳调度,并给出最小平均延迟和流水 ...

  2. 计算机系统结构——非线性流水线调度

    非线性流水线调度 回顾:线性流水线的调度 非线性流水线因为段间设置有反馈回路,一个任务在流水的全过程中,可能会多次通过同一段或越过某些段.这样,如果每拍向流水线送入一个新的任务,将会发生多个任务争用同 ...

  3. 51nod 1205 流水线调度(Johnson规则)

    对于加工顺序相同的两个或两个以上作业在两台机器上的加工排序,称之为:n个作业两台机床的作业排序问题,经典的启发式排序方法为Johnson规则. 其目的是最小化Makespan. 讨论版里有大佬详细推导 ...

  4. 处理机流水线------经典五段流水线

    文章是在我遇到这部分问题时查找的所有感觉挺好的内容的整合(全部是转载的) 流水线基础理论就不加了,最新的处理器流水线处理的机制也没有(一般以用不到),想了解去随便找个芯片厂商官网下个手册自己查. 这部 ...

  5. 华为OD机试题:工厂流水线调度

    题目描述: 一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业. 现给定流水线个数m,需要完成的作业数n, 每个作业的处理时间分别为 ...

  6. 【华为机试真题Python】工厂流水线调度

    题目描述 一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业. 现给定流水线个数m,需要完成的作业数n, 每个作业的处理时间分别为t ...

  7. 题目58 工厂流水线调度(ok)

    一个工厂有m条流水线 来并行完成n个独立的作业 该工厂设置了一个调度系统 在安排作业时,总是优先执行处理时间最短的作业 现给定流水线个数m 需要完成的作业数n 每个作业的处理时间分别为 t1,t2.. ...

  8. 流水线调度(51Nod-1205)

    题目 N个作业{1,2,-,n}要在由2台机器M1和M2组成的流水线上完成加工.每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业i所需的时间分别为a[i]和b[i].你可以安 ...

  9. UVA690 Pipeline Scheduling 流水线调度

    题意:给出5个工作单元,有10个完全相同的程序需要执行,工作单元要避免冲突,问所有程序执行完所需的时间最短是多少? 例: 7 X...XX. .X..... ..X.... ...X... ..... ...

最新文章

  1. 市政管网检测机器人收费标准_管道无损CCTV检测:复杂的地下管网工作,其实可以交给机器人来做...
  2. SUBMIT 的使用方法
  3. 第二百五十三节,Bootstrap项目实战-资讯
  4. 邹欣对话图灵奖得主Jeffrey Ullman:数据库不会进入周期性的坏循环|《新程序员》...
  5. 职业规划计算机专业1500字,【计算机职业生涯规划书2000字】_计算机专业职业生涯规划书2000字...
  6. 伺服驱动器cn1引脚定义_关于三菱驱动器CN1端口的接线-专业自动化论坛-中国工控网论坛...
  7. zedgraph显示最小刻度_关于ZedGraph几个难点
  8. tab切换之图片切换
  9. 计算机青蓝云题库,计算机三级上机题库 计算机三级网络技术上机题库《南开100题》.doc...
  10. Javafx Scene Builder使用教程
  11. 给Android手机设置的壁纸应该是多大尺寸
  12. 硬货专栏 |WebRTC SDP 详解和剖析
  13. 安全卸载Mac应用程序的方法,最后一种不会产生卸载残留
  14. java读取execle
  15. 进阶篇:3.9)3d打印件设计
  16. 三屯河水库库容查询及进库流量计算程序
  17. java中写定时任务
  18. “网约护士”进行时:有疑惑和担忧,在观察中前进
  19. ajax显示不了,AJAX请求不显示信息
  20. Android Toast连续快速切换更新内容无延迟

热门文章

  1. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载
  2. python和java哪个好学-Java VS Python 应该先学哪个?
  3. 简析三星新专利,语音识别技术的新方法
  4. 第M题 快速幂详解!: 给出3个正整数A B C,求A^B Mod C。
  5. React入门基础+练习 (一)
  6. RocketMQ 实战-SpringBoot整合RocketMQ
  7. WebRTC-Android硬编码流程详解
  8. 矩阵连乘 动态规划_利用动态规划解LeetCode第62题:不同路径
  9. linux怎么将终端一分为二,Linux下的终端和作业控制
  10. PowerDesigner name与code同步问题