贪心算法训练(七)——加工生产调度(流水作业调度问题)

1. 问题描述

  某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以送到 B 车间。某个产品 i 在 A、B 两车间加工的时间分别为 $A_i$、$B_i$。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短?这里所说的加工时间是指:从开始加工第一个产品到所有产品都加工完毕的时间。

2. 输入格式

  第一行仅一个数据 n(0 < n< 1000),表示产品的数量

  接下来 n 个数据是表示这 n 个产品在 A 车间加工,各自所需要的时间(都是整数)

  最后的 n 个数据是表示这 n 个产品在 B 车间加工,各自所需要的时间(都是整数)

3. 输出格式

  第一行一个数据,表示最短的加工时间

  第二行是一种用时最短的产品加工率

4. 样例输入

5
3 5 8 7 10
6 2 1 4 9

5. 样例输出

34
1 5 4 2 3

6. 思路分析

  直观上,最优调度一定让 $M_1$ 没有空闲,$M_2$ 的空闲时间尽量短

  Johnson 算法:设 $N_1$ 为 a < b 的作业集合,$N_2$ 为 a >= b 的作业集合,将 $N_1$ 的作业按 a 非减序排序,$N_2$ 中的作业按照 b 非增序排序,则 $N_1$ 作业接 $N_2$ 构成最优顺序

7. 代码

#include <iostream>using namespace std;int num;
int a[1001],b[1001],c[1001],d[1001];typedef struct DATA Data;struct DATA
{int m[1001];bool mark[1001];
};Data data;void insertion_sort(int a[],int arr[],int len);int main()
{ios::sync_with_stdio(false);cin>>num;int i = 1,sum = 0;for(;i <= num;i++)cin>>a[i];for(i = 1;i <= num;i++){cin>>b[i];data.m[i] = min(a[i],b[i]);d[i] = i;if(data.m[i] == a[i])data.mark[i] = false;elsedata.mark[i] = true;}insertion_sort(d,data.m,num);int j = num,k = 1;for(i = 1;i <= num;i++){if(data.mark[d[i]] == true)c[j--] = d[i];elsec[k++] = d[i];}for(i = 1;i <= num;i++)sum += a[c[i]];sum += b[c[i-1]];cout<<sum<<endl;for(i = 1;i <= num;i++)cout<<c[i]<<"  ";return 0;
}
void insertion_sort(int a[],int arr[],int len)
{for(int i=2; i<=len; i++){int key=arr[i];int key1 = a[i];int j;for(j=i-1; j>=0 && key<arr[j]; j--){arr[j+1] = arr[j];a[j+1] = a[j];}arr[j+1]=key;a[j+1] = key1;}
}

  

posted @ 2018-08-12 09:59 Nikki_o3o 阅读(...) 评论(...) 编辑 收藏

贪心算法训练(七)——加工生产调度(流水作业调度问题)相关推荐

  1. 贪心算法(4.加工生产调度(做题思路分析))

    1.流水作业调度问题(解题思路在下边)                                                                                加 ...

  2. 【算法设计与分析】流水作业调度问题 动态规划算法与代码实现 超详细

    题目描述 "加工顺序问题"又被称为"批处理作业调度问题". 设有n个工件需要在机器M1和M2上加工,每个工件的加工顺序都是先在M1上加工,然后在M2上加工.t1 ...

  3. java调度问题的贪心算法_java代码,多机调度问题,怎么解释

    展开全部 多机调度问题的Java实现(贪心算法) 具体问题描述以及C/C++实现参见网址e68a843231313335323631343130323136353331333361323564[jav ...

  4. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  5. prim算法_贪心算法详解(附例题)

    贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...

  6. 贪心算法—区间调度 电影节(POJ 4151)

    贪心算法--区间选取问题 或是区间调度问题 本文解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题).给你很多形如[start,end]的闭区间,请你设计一个算法,算出 ...

  7. 【算法学习】贪心算法

    参考算导第三版第16章 贪心算法 文章目录 1. 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2. 贪心算法原理 2.1 贪心选择性质 ...

  8. 算法导论-上课笔记7:贪心算法

    文章目录 0 前言 1 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2 贪心算法原理 2.1 贪心选择性质 2.2 最优子结构 2.3 ...

  9. 贪心算法:集合覆盖问题

    文章目录 贪心算法 教室调度问题 背包问题 集合覆盖问题 NP完全问题 总结 贪心算法 贪心算法是一种解决问题的思路:每一步选择局部最优解,最终也许不会得到最优结果,但是也会接近最优结果. 贪心算法具 ...

最新文章

  1. php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
  2. 虚拟机下Ubuntu没有GUI图形界面,解决方法
  3. python利器手机版-将安卓手机打造成你的python全栈开发利器
  4. 【原】网页程序学习Linux利器-----jsuix
  5. spring security 学习三-rememberMe
  6. python dict hash算法_2020年3月26日python学习笔记——hash
  7. 努力过头了,其实并不好
  8. 易优cms红色风格春节年货礼品公司网站模板源码
  9. matlab常用的代码,matlab常用代码
  10. php 常用函数 180,php 部分常用函数
  11. BUG搬运工:CSCvp31778-3802 apsw_watchdog: WARNING: System memory is running low
  12. 使用fastJson把对象转字符串首字母大小写问题的解决
  13. memcached 命令_Memcached Telnet命令示例
  14. 怎么改掉科学计数法_宝宝口唇干裂怎么回事?该怎么办?
  15. 0302 GDB调试走起【给PHP写插件】
  16. 软考初级程序员---题目(四)
  17. 手游联运系统后台有什么功能?后台功能大全!
  18. 配置华为防火墙NAT功能
  19. Grip编辑器增强版(UG二次开发工具,最好用的Grip编辑器,没有之一)
  20. xSS-Reflected

热门文章

  1. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL
  2. android html5播放器,用 HTML5 播放器在 iOS 或 Android 等移动设备上播放视频
  3. 苹果手机隐私分析数据是什么_苹果公司以用户为中心的隐私保护方法能教给我们什么?
  4. 三类6种地图可视化软件测评,最好用的工具居然是它
  5. 2016-2017-1 《信息安全系统设计基础》课程总结
  6. 系统分析实验 Python
  7. 【IJCAI 2020】如何看待 IJCAI 2020 summary reject阶段拒稿近一半?
  8. 数字图像处理_Matlab——车牌识别分析
  9. JS结合PHP瀑布流,JavaScript_原生JS实现响应式瀑布流布局,原生JS实现的瀑布流布局,代 - phpStudy...
  10. nodejs项目mysql使用sequelize支持存储emoji