题目描述

某工厂收到了 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. TM1637读取键值调试笔记

      因为项目原因需要用到TM1637,实现驱动数码管和按键扫描,参考了网络上搜索到的一些例程,基本实现了功能要求,能够实现数码管点亮和按键扫描.   调试过程中也出现一些问题,现在描述一下问题和解决方 ...

  2. 基于大模型的 RAG 核心开发——详细介绍 DeepSeek R1 本地化部署流程

    前言 自从 DeepSeek 发布后,对 AI 行业产生了巨大的影响,以 OpenAI.Google 为首的国际科技集团为之震惊,它的出现标志着全球AI竞争进入新阶段.从以往单纯的技术比拼转向效率.生 ...

  3. nodejs判断文件的字符集编码

    ----------------------------------- 通过前2字节判断: 编码 16进制数 unicode FF FE  或 FE FF utf-8 EF BB 代码: var fs ...

  4. C# 线程(二)——Thread学习

    参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...

  5. 勒索病毒分析-2024wdb-re2

    检查相关信息 可以看到病毒存在VMProtect虚拟壳 简单脱壳 首先我在x64debug中运行一次,发现没有中断退出,证明大概率没有反调试,但是有crc检测,所以尽量不下int3断点(脱壳时). 一 ...

  6. Java编程--接口(interface)简单用法(一)

    接口是Java中的一个重要的概念. interface:定义了子类要实现的功能.由全局常量和抽象方法组成. 接口的定义 定义一个简单的interface public interface A {  p ...

  7. 集合流之"计算集合中的Integer或Double或BigDecimal的sum总和(累计)"

    一.BigDecimal类型 BigDecimal withdrawalFeeExchange = groupDeverList.stream().map(DevWeekReport::getWith ...

  8. 将 Excel 拼接为 SQL 脚本

    好像半年前,我就有写过将 Excel 数据, 逐条 或 批量 插入 mysql 数据库, 那时候正在建库嘛, 想着弄个脚本来批量刷新和处理. 工具当时用的 pandas, 这个, 强的一批的工具, 无 ...

  9. Python 深拷贝 vs 浅拷贝

    在一些业务场景中, 有时候我们需要复制一个对象, 但是又不想对原来的对象产生影响, 就想搞个 副本 来为所欲为地操作嘛. 但是呢, 在 Python中呢, 又不能通过 赋值 的方式达到效果, 为啥呢? ...

  10. .NET 原生驾驭 AI 新基建实战系列(七):Weaviate ── 语义搜索的智能引擎创新者

    引言 随着人工智能和机器学习技术的迅猛发展,向量数据在推荐系统.自然语言处理.图像搜索等领域的应用日益广泛.传统的数据库在处理高维向量数据时往往面临性能瓶颈,而向量数据库的出现为这一问题提供了高效的解 ...