题目描述

某工厂收到了 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. unity里生成的.csproj和.sln :assembly definition以及ET框架中的程序集定义

    有一段时间一直没明白为啥有的时候第三方的package里的代码没法引用我们项目的,最近有点心得,记录下: 在创建unity项目的时候默认是创建一个解决方案就是以.sln为结尾的.默认开发时都在同一个解 ...

  2. InnoDB 的内存结构详情

    文章目录 1.更新语句在MySQL中是如何执行的 2.重要的内存结构-Buffer Pool缓冲池 3.undo日志文件如何让更新的数据可以回滚 4.更新Buffer Pool缓冲池中的缓存数据 5. ...

  3. 整合阿里OSS进行文件上传

    3.整合阿里OSS进行文件上传 1).引入spring-cloud-starter-alicloud-oss包 2).在配置文件中配置Key.endpoint 3).自动注入private OSSCl ...

  4. 【自用】git提交commit 注释规范

    git初始化 首先下载安装git,配置好公私密钥和github git命令 git init git remote add origin [远程库地址] git pull origin master ...

  5. MQTT服务器 apache-apollo

    apache-apollo下载 下载地址 http://archive.apache.org/dist/activemq/activemq-apollo/1.7.1/ 原来的官网地址下载不到apach ...

  6. 凯亚IOT平台在线测试MQTT接入设备

    一.概述 凯亚 (Kayak)开通了MQTT端口425,以便给感兴趣的同僚进行测试,下面将在此篇文章讲解如何平台接入设备进行MQTT通信 凯亚 (Kayak) 是什么? 凯亚(Kayak)是基于.NE ...

  7. FastAPI与Tortoise-ORM开发的神奇之旅

    title: FastAPI与Tortoise-ORM开发的神奇之旅 date: 2025/05/05 00:15:48 updated: 2025/05/05 00:15:48 author: cm ...

  8. CLion打开VS创建的GBK编码格式的项目中文乱码问题的解决方法

    在 CLion 中设置 GBK 编码用于编译代码时,如果输出的 message 乱码,通常是由于控制台编码与代码文件的编码不匹配导致的.以下是解决问题的步骤: 1. 设置文件编码为 GBK 确保你的源 ...

  9. Java和C++性能大比拼

    用来运行Java语言的HotSpot VM主要是用C++语言来写的,所以我们在研究JDK时不得不去学习C++这门语言.C++和Java都是面向对象的语言,所以它们常被拿来做比较.本文将从性能的角度对比 ...

  10. Ubuntu下好用的工具

    UML画图工具 推荐:Drawio 参考:https://blog.csdn.net/jsm1010/article/details/112920539 安装命令:sudo snap install ...