loj10003加工生产调度
题目描述
某工厂收到了 n个产品的订单,这 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。
某个产品 i 在 A,B 两车间加工的时间分别为 A_i,B_i。怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。
这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。
输入格式
第一行仅—个数据 n ,表示产品的数量;
接下来 n 个数据是表示这 i 个产品在 A 车间加工各自所要的时间;
最后的 n 个数据是表示这 i 个产品在 B 车间加工各自所要的时间。
输出格式
第一行一个数据,表示最少的加工时间;
第二行是一种最小加工时间的加工顺序。
样例
样例输入
5
3 5 8 7 10
6 2 1 4 9
样例输出
34
1 5 4 2 3
数据范围与提示
对于100% 的数据n<=1000,A_i,B_i<=350 。
本题的 SPJ 对行尾多余空格敏感,各位输出答案时不要留行尾多余空格~
_______________________________________
比较难搞的一道贪心题目。
这个里面用到约翰逊-贝尔曼法则。还可以有三道工序,大家可以参考http://www.managershare.com/wiki/%E7%BA%A6%E7%BF%B0%E9%80%8A-%E8%B4%9D%E5%B0%94%E6%9B%BC%E6%B3%95%E5%88%99
_______________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1010;
4 int n;
5 struct node
6 {
7 int a,b,mn,no;
8 }sz[maxn];
9 int px[maxn];
10 bool cmp(node x,node y)
11 {
12 return x.mn<y.mn;
13 }
14 int main()
15 {
16 scanf("%d",&n);
17 for(int i=1;i<=n;++i)scanf("%d",&sz[i].a),sz[i].no=i;
18 for(int i=1;i<=n;++i)scanf("%d",&sz[i].b),sz[i].mn=min(sz[i].a,sz[i].b);
19 sort(sz+1,sz+1+n,cmp);
20 int l=0,r=n+1;
21 int ansl=0,ansr=0;
22 for(int i=1;i<=n;++i)
23 {
24 ansl+=sz[i].a;ansr+=sz[i].b;
25 if(sz[i].mn==sz[i].a)
26 {
27 px[++l]=sz[i].no;
28 if(l==1)ansr+=sz[i].a;
29 }
30 else
31 {
32 px[--r]=sz[i].no;
33 if(r==n)ansl+=sz[i].b;
34 }
35 }
36 printf("%d\n",max(ansl,ansr));
37 for(int i=1;i<n;++i)printf("%d ",px[i]);
38 printf("%d",px[n]);
39 return 0;
40 }
loj10003加工生产调度的更多相关文章
- codevs 3008 加工生产调度[贪心]
3008 加工生产调度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 某工厂收到了n个产品的订 ...
- 加工生产调度(prod)
加工生产调度(prod) 题目描述 有n个部件需在A.B机器上加工,每个工件都必须经过先A后B两道工序. 已知:部件i在A.B机器上的加工时间分别为ai,bi. 问:如何安排n个工件的加工顺序,才能使 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- 洛谷P1248 加工生产调度
流水作业调度问题 有\(N\)个作业要在两台机器\(M_1\)和\(M_2\)组成的流水线上完成加工.每个作业\(i\)都必须先花时间\(a_i\)在\(M_1\)上加工,然后花时间\(b_i\)在\ ...
- 【题解/模板】P1248 加工生产调度(贪心)
[题解/模板]P1248 加工生产调度(贪心) 分析: \(A\)流水线的时间是确定的,所以现在就是要让\(b\)的时间尽量短 \(tB > tA\),除非所有东西都不需要\(b\).(t指结束 ...
- 「一本通 1.1 例 4」加工生产调度(贪心算法)(luogu P1248)题解
加工生产调度 题目描述 某工厂收到了 n n n 个产品的订单,这 n n n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工. 某个产品 i i i 在 A. ...
- 【洛谷P1248】加工生产调度
题目大意:某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工.某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n个产品的加工顺序, ...
- Codevs3008 加工生产调度
题目大意:某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,而且必须先在A车间加工后才干够到B车间加工. 求如何安排这n个产品的加工顺序.才干使总的加工时间最短. 这里所说的加工时间是指 ...
- CODEVS——T3008 加工生产调度
http://codevs.cn/problem/3008/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ...
随机推荐
- 隐语义模型LFM
隐语义模型是通过隐含特征,联系用户和物品,基于用户的特征对物品进行自动聚类,然后在用户感兴趣的类中选择物品推荐给用户. 对于推荐系统,常用的算法: USER-CF:给用户推荐和他兴趣相似的用户喜欢 ...
- 【kinetic】操作系统探索总结(六)使用smartcar进行仿真
p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify } a:link { color: r ...
- SpringBoot全局异常拦截
SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...
- JAVA的一些笔记
/*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...
- 详细介绍如何自研一款"博客搬家"功能
前言 现在的技术博客(社区)越来越多,比如:imooc.spring4All.csdn.cnblogs或者iteye等,有很多朋友可能在这些网站上都发表过博文,当有一天我们想自己搞一个博客网站时就会发 ...
- css3 知识点积累
-moz- 兼容火狐浏览器-webkit- 兼容chrome 和safari1.角度 transform:rotate(30dge) 水平线与div 第四象限30度 transform: ...
- 看图知义,Winform开发的技术特点分析
整理一下自己之前的Winform开发要点,以图文的方式展示一些关键性的技术特点,总结一下. 1.主体界面布局 2.权限管理系统 3.工作流模块 4.字典管理 5.通用的附件管理模块 6.系统模块化开发 ...
- ARM CPU的SVC模式
关于ARM CPU模式中的SVC Arm中CPU的模式 [第一方面] 系统sys模式 VS 管理svc模式 首先,sys模式和usr模式相比,所用的寄存器组,都是一样的,但是增加了一些访问一些在usr ...
- “==”和equals的区别
区别: (1)比较基本数据类型时 只能采用"==",比较的是数值; (2)当比较引用数据类型时 "==" 比较的是引用对象的内存地址; 而equals分两种情况 ...
- postgresql-从表中随机获取一条记录
目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...