Luogu [P1248] 加工生产调度
这个题可以贪心
我们首先想:对于所有产品,我们大致可以将其分为三类:
①.在A车间的时间要比B车间长。
②.两者一样。
③.在B车间的时间要比A车间长。
对于这三大类,怎么安排顺序?
可以看出,①类是消耗B车间任务,③类是给B车间增加任务。
我们想,要想时间最快,必须要尽可能的让AB两车间没有空闲的工作。如果我们将①放在了开头,而③放在了结尾,那必然会导致开始时B工作的时间断断续续,最后等A工作完了,B还剩下一大堆任务。
所以我们要尽可能的将③放在开始,①放在结尾,②安排在中间就可以(没有什么影响)。
三大类排好顺序后,我们再想每一类内部之间的顺序:
对于①:放在结尾执行,到最后必然A全部执行完毕,B还剩一点没执行(因为A最后执行的产品刚刚归入B类),那我们此时所消耗的时间就是最后产品的B车间时间,当然是越小越好,所以③类要按照B从大到小排。
对于②:好像既然放在了中间,就无所谓了。
对于③:同①理,放在开始执行,一开始必然第一个任务执行A时,B此时空着,那我们此时所消耗的时间就是开始产品的A车间时间,当然是越小越好,所以①类要按照A从小到大排。
然后从头到尾模拟一遍就行了。
代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n;
struct qwq{
int A;
int B;
int C;//看看这个零件属于哪一类
int id;//此零件下标
}e[];
int cmp(qwq &a,qwq &b){
if(a.C!=b.C)
return a.C>b.C;
else if(a.C==)
return a.A<b.A;
else if(a.C==-)
return a.B>b.B;
else
return a.A<b.A;
}
inline int read(){
int x=;
char ch=getchar();
while(ch<''||ch>'')
ch=getchar();
while(ch>=''&&ch<=''){
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x;
}
int Time_c,cha;
int main(){
n=read();
for(int i=;i<=n;i++)
e[i].A=read(),e[i].id=i;
for(int i=;i<=n;i++){
e[i].B=read();
e[i].C=((e[i].B-e[i].A) >= ? ((e[i].B-e[i].A) > ? : ) : -);//三目运算符给任务分类
}
sort(e+,e+n+,cmp);
for(int i=;i<=n;i++){//模拟
Time_c+=e[i].A;
cha=max(cha-e[i].A,);
cha+=e[i].B;
}
cout<<Time_c+cha<<endl;
for(int i=;i<=n;i++)
printf("%d ",e[i].id);
return ;
}
Luogu [P1248] 加工生产调度的更多相关文章
- 【流水调度问题】【邻项交换对比】【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指结束 ...
- 洛谷P1248 加工生产调度 贪心
正解:贪心 解题报告: 传送门$QwQ$ $umm$直接看可能比较难想,可以先考虑另一个题? 有$n$个小怪,每打一只小怪会扣$a_i$的血,打完之后会回升$b_i$的血,问至少要多少血量才能使全程血 ...
- 「一本通 1.1 例 4」加工生产调度(贪心算法)(luogu P1248)题解
加工生产调度 题目描述 某工厂收到了 n n n 个产品的订单,这 n n n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工. 某个产品 i i i 在 A. ...
- codevs 3008 加工生产调度[贪心]
3008 加工生产调度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 某工厂收到了n个产品的订 ...
- 加工生产调度(prod)
加工生产调度(prod) 题目描述 有n个部件需在A.B机器上加工,每个工件都必须经过先A后B两道工序. 已知:部件i在A.B机器上的加工时间分别为ai,bi. 问:如何安排n个工件的加工顺序,才能使 ...
- 【洛谷P1248】加工生产调度
题目大意:某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工.某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n个产品的加工顺序, ...
- 题解 P1248 【加工生产调度】
题目 某工厂收到了 n 个产品的订单,这 n 个产品分别在 A.B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工. 某个产品 i 在 A.B 两车间加工的时间分别为 Ai,Bi 怎 ...
随机推荐
- Java Web之文件的上传及下载
一.文件的上传 1. 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. 2.表单的设置 1.向服务器上传一个文件时,表单要使用post ...
- 洛谷P2574 XOR的艺术
题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...
- 安居客scrapy房产信息爬取到数据可视化(上)-scrapy爬虫
出发点 想做一个地图热力图,发现安居客房产数据有我要的特性.emmm,那就尝试一次好了~ 老规矩,从爬虫,从拿到数据开始... scrapy的配置 创建一个项目(在命令行下敲~): scrapy st ...
- 移动Web开发规范概述
以下规范建议,均是Alloyteam在日常开发过程中总结提炼出的经验,规范具备较好的项目实践,强烈推荐使用. 字体设置 使用无衬线字体 body { font-family: "Helvet ...
- css3中的变形(transform)、过渡(transtion)、动画(animation)
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...
- Vue中的指令(听博主说总结的很好)
指令[重点] 作用:简化Dom操作 参考:https://cn.vuejs.org/v2/api/#%E6%8C%87%E4%BB%A4 特点: 1.都是以v-开头 2.除了插值表达式,其它都写在标签 ...
- spark_spark连接hive config
1 环境 hadoop2.7.3 apache-hive-2.1.1-bin spark-2.1.0-bin-hadoop2.6 jdk1.8 2 配置文件 在hive-site.xml中配置mysq ...
- 忘记mysql数据库密码时进行修改方法
长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件夹( ...
- Storm概念学习系列之Blot消息处理者
不多说,直接上干货! Bolt消息处理者 认识了消息源Spout和消息的数据存储元组Tuple,接下来了解消息的处理者Bolt.Bolt是接收Spout发出元组Tuple后处理数据的组件,所有的消息处 ...
- Centos7搭建redis,同一服务器启动两个端口的redis
1.安装redis [1]下载安装包 #准备安装文件夹 mkdir /usr/local/soft/redis #进入文件夹 cd /usr/local/soft/redis #下载安装包 wget ...