题目描述

某工厂收到了 nn 个产品的订单,这 nn 个产品分别在 A,BA,B 两个车间加工,并且必须先在 AA 车间加工后才可以到 BB 车间加工。某个产品 ii 在 A,BA,B 两车间加工的时间分别为Ai,BiAi​,Bi​。怎样安排这 nn个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A,BA,B 两车间加工完毕的时间。

输入描述

多组输入,每组数据的第一行仅一个正整数 n(0<n<1000)n(0<n<1000) ,表示产品的数量。接下来 nn 个数据是表示这 nn 个产品在 AA 车间加工各自所要的时间 (都是整数)。最后的 nn 个数据是表示这 nn 个产品在 BB 车间加工各自所要的时间 (都是整数)。

输出描述

对于每组输入一个数据,表示最少的加工时间

样例输入(多组输入)

5
3 5 8 7 10
6 2 1 4 9

样例输出

34

解题思路:

1.贪心

2.因为必须要等待A加工结束才能加工B,所以为了使时间最短,应让A加工时间最短的排在最前,以使B加工的时候,A能同时加工下一件物品。

3.B加工时间最短的放在最后,因为B必须要等待A完工才能加工,放在最后能让等待时间最短。

代码概要:

1.排序:提取每个部件A和B中最小的数组成新数组并从小到大排序。从左往右,如果提取的是A则放到前面,B则放到后面

2.时间计算

先算A。因为B必须要等A完成之后才能进行下一个A,所以当B的时间小于A时,先将B时间同步至A然后在加B的时间

(关于这个可以画草图体会一下)

k = 0 ; t = 0;//k为A加工时间,t为B加工时间

for(i = 1;  i <= n;i++){

k += a[ans[i]];

if(t < k) t = k;

t += b[ans[i]];

}

cout << t << endl;

完整代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 1005
using namespace std; int ans[N],n,k,i,j,t,a[N];
int b[N],m[N],s[N]; void solve(){
for(i = 1; i <= n;i++)
{
m[i] = min(a[i],b[i]);
s[i] = i;
}
for(i = 1; i <= n-1;i++)//产品从小到大排序
for(j =i + 1; j<= n; j++)
if(m[i] > m[j])
{
swap(m[i],m[j]);
swap(s[i],s[j]);
}
k = 0;t = n + 1;
for(i = 1; i <= n;i++)//安排产品加工顺序
if(m[i] == a[s[i]])
{
k++;
ans[k] = s[i]; }
else{
t--;
ans[t] = s[i];
}
k = 0 ; t = 0;//k为A加工时间,t为B加工时间
for(i = 1; i <= n;i++){
k += a[ans[i]];
if(t < k) t = k;
t += b[ans[i]];
}
cout << t << endl;
} int main(){ while(cin >> n){
for(i = 1; i <= n; i++)
cin >> a[i];
for(i = 1; i <= n; i++)
cin >> b[i];
solve();
memset(ans, 0, sizeof(ans));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(m, 0, sizeof(m));
memset(s, 0, sizeof(s));
}
return 0;
}

参考原文:https://blog.csdn.net/zqhf123/article/details/106431238/

本代码为过OJ进行修改。

 

加工生产调度 贪心算法 c++的更多相关文章

  1. 【题解/模板】P1248 加工生产调度(贪心)

    [题解/模板]P1248 加工生产调度(贪心) 分析: \(A\)流水线的时间是确定的,所以现在就是要让\(b\)的时间尽量短 \(tB > tA\),除非所有东西都不需要\(b\).(t指结束 ...

  2. codevs 3008 加工生产调度[贪心]

    3008 加工生产调度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 某工厂收到了n个产品的订 ...

  3. 洛谷P1248 加工生产调度 贪心

    正解:贪心 解题报告: 传送门$QwQ$ $umm$直接看可能比较难想,可以先考虑另一个题? 有$n$个小怪,每打一只小怪会扣$a_i$的血,打完之后会回升$b_i$的血,问至少要多少血量才能使全程血 ...

  4. 「一本通 1.1 例 4」加工生产调度(贪心算法)(luogu P1248)题解

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

  5. 洛谷P1248 加工生产调度

    流水作业调度问题 有\(N\)个作业要在两台机器\(M_1\)和\(M_2\)组成的流水线上完成加工.每个作业\(i\)都必须先花时间\(a_i\)在\(M_1\)上加工,然后花时间\(b_i\)在\ ...

  6. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  7. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

  8. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

  9. LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

  10. ACM_ICPC hdu-2111(简单贪心算法)

    一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #inclu ...

随机推荐

  1. springboot将vo生成文件到目录

    依赖 org.springframework spring-mock 2.0.8 com.alibaba fastjson 1.2.62 service实现 public RestResponseBo ...

  2. Unity3d中协程的原理,你要的yield return new xxx的真正理解之道

  3. python,设置windows系统时间

    老笔记本纽扣电池没电了,每次拔掉电源再重新开机时间就对不上了,然后写个python脚本开机后执行对时吧 脚本直接网上复制的,比较简单,貌似时访问www.baidu.com获取头信息里的时间,然后设置为 ...

  4. JVM 垃圾回收时产生的 concurrent mode failure 的原因是什么?

    JVM 垃圾回收时产生的 concurrent mode failure 的原因是什么? 在 JVM 中,concurrent mode failure 是垃圾回收器(通常是 CMS,即 Concur ...

  5. app自动化的三大等待

    app自动化的三大等待与web自动化的三大等待的代码脚本一样 一.硬性等待 硬性等待无论元素是否出现,都必须等待设置的时间再继续执行后面的代码. 使用简单,但是容易浪费时间.所以一般和隐式等待或显式等 ...

  6. 容器原理之cgroup

    " 以 docker 为代表,轻量.便携的 container 使得打包和发布应用非常容易.系列文章容器原理主要分析 container 用到的核心技术,主要包括 Linux namespa ...

  7. Spring中的依赖注入DI

    目录 Spring中的依赖注入DI Spring中的依赖注入DI 依赖注入的简单理解就是给对象设置变量值. Spring配置文件 <?xml version="1.0" en ...

  8. AI编译器及TVM整体架构

    虽然之前也依据tvm官方文档写过一篇关于TVM架构的博客,但总感觉属于一种身在此山中的感觉(偏向于TVM实现的各个模块),并没有一览众山小的即视感(对框架的整体理解). 因此,今天再次请求出战... ...

  9. python中的stub文件(.pyi)的用途

    在阅读TVM源码时,发现了*.pyi文件,里面的函数没有具体的实现,都诸如如下的形式,感到很疑惑. @overload def getattr(__o: object, __name: str, __ ...

  10. 开启PyTorch的第一天

    为积极响应导师的要求,我开启了我的深度学习之旅,成为炼丹大队的一员. 今天先是安装PyTorch,路子大家网上已经摸的很清了,我主要参考的是 https://blog.csdn.net/weixin_ ...