Luogu P2751 [USACO4.2]工序安排Job Processing
题目描述
一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B。每个操作只有一些机器能够完成。
上图显示了按照下述方式工作的流水线的组织形式。A型机器从输入库接受工件,对其施加操作A,得到的中间产品存放在缓冲库。B型机器从缓冲库接受中间产品,对其施加操作B,得到的最终产品存放在输出库。所有的机器平行并且独立地工作,每个库的容量没有限制。每台机器的工作效率可能不同,一台机器完成一次操作需要一定的时间。
给出每台机器完成一次操作的时间,计算完成A操作的时间总和的最小值,和完成B操作的时间总和的最小值。
注:1、机器在一次操作中干掉一个工件; 2、时间总和的意思是最晚时间点
输入格式
第一行 三个用空格分开的整数:N,工件数量 (1<=N<=1000);M1,A型机器的数量 (1<=M1<=30);M2,B型机器的数量 (1<=M2<=30)。
第二行…等 M1个整数(表示A型机器完成一次操作的时间,1…20),接着是M2个整数(B型机器完成一次操作的时间,1…20)
输出格式
只有一行。输出两个整数:完成所有A操作的时间总和的最小值,和完成所有B操作的时间总和的最小值(A操作必须在B操作之前完成)。
样例 #1
样例输入 #1
5 2 3
1 1 3 1 4
样例输出 #1
3 5
提示
题目翻译来自NOCOW。
USACO Training Section 4.2
贪心、二分想法
第二问的答案肯定是基于第一问的安排的。
对于第一问,所有工件一起来,应该是在空闲的机器中优先使用用时短的机器,并且一有空闲的就使用(这其实是错误的,见下文)。
不过我并没有这样想下去,而是想到二分答案。简单,不赘述。
对于第二问,工件不是一次性全部过来,而是在某些的时间送来一定量的工件。
这些时间,就是第一问的安排。得到第一问答案之后,安排也好求。
考虑怎么安排B机器。某个时间来了一些工件,能在下一次工件到来之前的,肯定要做。如果不能,那应该要优先选择最大的,达到这样的效果(从上到下依次选择):
事情没有这么简单。两台机器,2 10000
,来了3个工件,5s后再来一个。如果优先选择最大的,那需要10000s才能解决,看来不对。
看来,我们不是选择最大的,而是选择“比较大”的,使后面的制作足以都选比它小的的,最小的一个大的(好绕口)。
那能不能把时间倒过来看,就是优先选择最小的了呢?然而,最后一个时间点,比如机器有3个,工件有6个,这就超出我们的预料了。同时,我们也不知道,前面的工件会不会太多,需要我们在后面的时间点解决。
想法难以推进了。
贪心 - AC(补)
第二问的答案肯定是基于第一问的安排的。
如果不能,那应该要优先选择比较大的。
这些想法正确且关键,
但有一个地方没想到点子上。
对于第二问,工件不是一次性全部过来,而是在某些的时间送来一定量的工件。这是引发上文结尾许多问题的根源。
总共n个工件,所以要进行n次A操作,n次B操作。我们把A、B操作先分开考虑。对于一个工件,我们要贪心选择能让它结束时间最早的机器来做它。因而,处理出安排方案。定义f(i)f(i)f(i),n个A操作中第i小的结束时间。同理g(i)g(i)g(i).
对于第一个问,很好理解,就是f(n)f(n)f(n).
而第二个问,对于第i个完成A操作的工件,基于这张图的想法:
早完成A的,让它晚完成B;完成时间是f(i)+g(n−i+1)f(i)+g(n-i+1)f(i)+g(n−i+1),反过来相加。
怎么理解这个式子?
如果B机器都是第一次用,很好理解。如果是多次使用,从下图就能理解,不再赘述。
int n, m1, m2, a[MAXM], b[MAXM], x[MAXM], y[MAXM], f[MAXN], g[MAXN], ans;int main() {scanf("%d%d%d", &n, &m1, &m2);for (int i = 1; i <= m1; ++i) {scanf("%d", a + i);x[i] = a[i];}for (int i = 1; i <= m2; ++i) {scanf("%d", b + i);y[i] = b[i];}for (int i = 1; i <= n; ++i) {f[i] = g[i] = INF;int p, q;for (int j = 1; j <= m1; ++j) if (ckmin(f[i], x[j])) p = j;for (int j = 1; j <= m2; ++j) if (ckmin(g[i], y[j])) q = j;x[p] += a[p]; y[q] += b[q];}for (int i = 1; i <= n; ++i) {ckmax(ans, f[i] + g[n - i + 1]);}printf("%d %d\n", f[n], ans);return 0;
}
Luogu P2751 [USACO4.2]工序安排Job Processing相关推荐
- 洛谷P2751 [USACO4.2]工序安排Job Processing
P2751 [USACO4.2]工序安排Job Processing 18通过 78提交 题目提供者该用户不存在 标签 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 一家工 ...
- [USACO4.2]工序安排Job Processing
https://www.luogu.org/problemnew/show/P2751 题解:贪心 从前往后贪心,用f[i]记录第i个零件完成的最小时间 定义一个结构体,记录 v:每一台机器完成一个零 ...
- Job Processing 工序安排
描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B.每个操作只有一些机器能够完成. 上图显示了按照下述方式工作的流水线的组织形式.A型机器从输入库接受工件,对其施加操作A,得到的中 ...
- 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)
题目链接:草地排水 若一条从源点到汇点的路径上各条边的剩余容量都大于0,则称这条路径为一条增广路. Edmonds-Karp增广路的策略就是不断用bfs寻找增广路,直至网络中不在存在增广路为止. 在每 ...
- 入门数据分析,需要会什么
作者:木兮月宝 来源:木木自由 我们不要局限于入门专职数据分析的岗位,而是从广义"数据分析"的角度,来理解一下如何入门数据分析.不存在质疑自己合不合适做数据分析.纠结零基础入门 ...
- USACO Section 4
前言 好久没更新这个系列了,最近闲的无聊写一下.有两题搜索懒得写了. P2737 [USACO4.1]麦香牛块Beef McNuggets https://www.luogu.com.cn/probl ...
- 曲柄加工工艺及夹具设计(铣A面)【说明书+CAD图纸+SW三维图+工序卡+过程卡】
摘 要 本设计是基于曲柄零件的加工工艺规程及一些工序的专用夹具设计.曲柄零件的主要加工表面是平面及孔系.一般来说,保证平面的加工精度要比保证孔系的加工精度容易.因此,本设计遵循先面后孔的原则.并将孔 ...
- 机械制造工艺学课程设计——发动机连杆加工(说明书+CATIA三维模型+CAD图纸+工序卡+过程卡)
目录 引言 1. 零件的分析 1.1. 零件的结构和功用分析 1.2. 零件的工艺分析 1.2.1. 连杆的加工要求: 1.2.2. 加工时的工艺分析与技术要求 2. 机械加工工艺规程制定 2.1. ...
- G41J—6型阀体双面钻24孔专用机床上的夹具设计(说明书 CAD图纸 开题报告 液压原理图 工序图 机床生产率计算卡)
摘要 本次设计的主要任务是G41J-6型阀体双面钻24孔专用机床上的专用夹具设计,附加机床的总体设计,即"三图一卡"设计:被加工零件工序图.加工示意图.机床尺寸联系图和生产率计算卡 ...
最新文章
- matlab doc函数,matlab常用函数.doc
- ScrollView 嵌套EditText 滑动冲突解决
- Eigen 学习笔记
- 《转化:提升网站流量和转化率的技巧》迷你书
- 聚类 高维聚类 聚类评估标准 EM模型聚类
- 【软考】信息系统项目管理师--知识点
- mysql修改表结构权限_mysql 修改表结构操作
- 医疗:ERP进销存系统(8)
- html5.0笔记,动易sf5.0标签笔记.doc
- flash 上传文件 java_Flash 二进制传图片到后台Java服务器接收
- 「镁客·请讲」Site24×7李飞:云服务是大势所趋,云监控生意又要怎么做?...
- 「leetcode」112. 路径总和113. 路径总和II(详解)递归函数究竟什么时候需要返回值,什么时候不要返回值?
- java 单例模式(饿汉模式和懒汉模式)
- proteus仿真Arduino
- 红帽6.2 DOS无盘 NetWare 制作
- 使用微信开发工具开发微信小程序(二)——协同工作、发布与事件绑定
- android手机连接windows电脑,安卓手机USB怎么连接电脑上网(一个APP让你的安卓手机变Windows电脑)...
- Android电池信息的获取
- 零基础实现摄像头的全平台直播 (一)内网直播的实现
- python3 + wxpython 实现RSA加密聊天室
热门文章
- 《量化投资策略如何现额益简及PDF电子书下载
- Java面试题:Applet和普通的Java应用程序有哪些区别?
- Could not load the Qt platform plugin “xcb“ 问题解决
- 【vue】手动实现vue的v-model语法糖,以及控制在输入法完成之后才更新model
- 市面上常见模拟器比对
- 汇编实验5 DOS、BIOS调用
- vscode remote-ssh连接ubuntu子系统提示错误:WSL: VSCode server install fails on Ubuntu 19.10
- 51单片机,时钟频率,机器周期,与执行指令的时间
- 杨辉三角~~~~~~~~
- 十年技术进阶路:让我明白了三件要事。关于如何做好技术 Team Leader?如何提升管理业务技术水平?(10000字长文)...