「一本通 1.1 例 4」加工生产调度

  • 【来源】
  • 【题目描述】
  • 【输入格式】
  • 【输出格式】
  • 【输入样例】
  • 【输出样例】
  • 【数据范围】
  • 【解析】
  • 【代码】

【来源】

一本通题库-1425
LibreOJ-10003
vjudge

注意:LibreOJ和一本通题库题意相同,但数据范围不同。代码以一本通题库为准。

【题目描述】

某工厂收到了 nnn 个产品的订单,这 nnn 个产品分别在 A、BA、BA、B 两个车间加工,并且必须先在 AAA 车间加工后才可以到 BBB 车间加工。

某个产品 iii 在 A,BA,BA,B 两车间加工的时间分别为Ai,BiA_i,B_iAi​,Bi​。怎样安排这 nnn 个产品的加工顺序,才能使总的加工时间最短。

这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,BA,BA,B 两车间加工完毕的时间。

【输入格式】

第一行仅—个数据 nnn ,表示产品的数量;

接下来 nnn 个数据是表示这 nnn 个产品在 AAA 车间加工各自所要的时间;

最后的 nnn 个数据是表示这 nnn 个产品在 BBB 车间加工各自所要的时间。

【输出格式】

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

第二行是一种最小加工时间的加工顺序。

【输入样例】

5
3 5 8 7 10
6 2 1 4 9

【输出样例】

34
1 5 4 2 3

【数据范围】

对于100100100%的数据, 0<n<100000 < n < 100000<n<10000,所有数值皆为整数。

【解析】

贪心。
要使总加工时间最少就是让车间的空闲时间最少,就要把在A车间加工所需时间最少的产品先加工,把在B车间加工所需时间最少的产品后加工。

设AiA_iAi​为第iii个产品在AAA车间加工所需时间,BiB_iBi​为第iii个产品在BBB车间加工所需时间。

贪心策略: 令Mi.numM_i.numMi​.num=min(Ai,Bi)min(A_i,B_i)min(Ai​,Bi​),将M从小到大排序,从第一个开始处理,如果Mi=AiM_i=A_iMi​=Ai​,将它排在从头开始加工的产品后面,如果Mi=BiM_i=B_iMi​=Bi​,则将它排在从尾开始加工的产品前面。

【代码】

#pragma GCC optimize(3,"Ofast","inline")
#pragma G++ optimize(3,"Ofast","inline")#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>#define RI                 register int
#define re(i,a,b)          for(RI i=a; i<=b; i++)
#define ms(i,a)            memset(a,i,sizeof(a))
#define MAX(a,b)           (((a)>(b)) ? (a):(b))
#define MIN(a,b)           (((a)<(b)) ? (a):(b))using namespace std;typedef long long LL;int const N=1e4+5;struct Node {int num,id;
} m[N];int n;
int a[N],b[N],f[N];int main() {scanf("%d",&n);for(int i=1; i<=n; i++) scanf("%d",&a[i]);for(int i=1; i<=n; i++) scanf("%d",&b[i]);for(int i=1; i<=n; i++) {m[i].num=MIN(a[i],b[i]);m[i].id=i;}for(int i=1; i<=n-1; i++) for(int j=i+1; j<=n; j++) if(m[i].num>m[j].num) {swap(m[i],m[j]);}int l=0,r=n+1;for(int i=1; i<=n; i++) {int num=m[i].num;int id=m[i].id;if(num==a[id]) f[++l]=id;else f[--r]=id;}int ta=0,tb=0;for(int i=1; i<=n; i++) {ta+=a[f[i]];if(tb<ta) tb=ta;tb+=b[f[i]];}printf("%d\n",tb);for(int i=1; i<=n; i++) printf("%d ",f[i]);printf("\n");return 0;
}

【C++】「一本通 1.1 例 4」加工生产调度相关推荐

  1. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

  2. LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  3. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  4. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  5. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  6. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  7. 「一本通 4.1 例 3」校门外的树 (loj10115)

    题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入 l,r表示在 l 到 r 之间种上 ...

  8. loj10157. 「一本通 5.2 例 5」皇宫看守

    思路: 例四是覆盖全部边,dp两个状态,例五是覆盖全部点,dp三个状态. #include<cstdio> #include<iostream> #include<cst ...

  9. #10019. 「一本通 1.3 例 2」生日蛋糕

    冥想盆 感性理解深搜剪枝(看完这个再看下面的文章) 理解本题的思路 [代码实现1:最慢最好理解(自己打的):100多ms] [代码实现2:次慢:30多ms] [代码实现3:最快:10多ms] 最后放上 ...

最新文章

  1. AJAX培训第二讲:使用AJAX框架(上)
  2. 转载:一位资深程序员大牛给予Java初学者的学习路线建议
  3. 把技术卖给不懂技术的人
  4. Xcode生成的可执行文件在哪里
  5. Python并发编程—进程
  6. 【Leetcode | 47】 222. 完全二叉树的节点个数
  7. 前馈神经网络——深度学习之神经网络核心原理与算法
  8. 应用内评分_评分者信度
  9. 日本「AI 鱼脸识别」项目,每分钟识别 100 条,有望让渔民不再“摸鱼”
  10. 《我在谷歌大脑见习机器学习的一年:Node.js创始人的尝试笔记》阅读笔记
  11. Atitit.  Js 冒泡事件阻止 事件捕获   事件传递  事件代理
  12. 大巧不工,袋鼠云正式开源大数据任务调度平台——Taier(太阿)
  13. matlab设计译码器,基于Matlab编译码器的仿真与设计
  14. The firefox installs flashplugin for Linux
  15. “燕云十六将”之张永生(13)
  16. 无线传感网络的基本结构
  17. cad快看_苹果用户福音——CAD快速看图mac版来啦
  18. 联发科6758_酷派发布新机!联发科P30+4900mAh售价899元,谁给你的勇气?
  19. 【react】全选复选框和单个复选框联动功能
  20. 使用IBM Data Movement Tool 具体迁移oracle至db2实验

热门文章

  1. 大数据思维导图锦集(原创吐血整理,不定期更新)
  2. pic57 c语言编程,PIC16C57C初始化头文件
  3. 研发里那只看不见的手,勒的很疼
  4. 抛物线的几何性质(传统几何法推导)
  5. DySAT: Deep Neural Representation Learning on Dynamic Graph via Self-Attention Networks
  6. Ubuntu 18.04 锁屏 快捷键 无效
  7. matlab 棋盘格畸变矫正
  8. Mac更新系统后无法使用git
  9. teamview+ccproxy实现远程局域网本地访问
  10. hive和presto下标准时间格式和时间戳的转化