当前位置: 首页 > wzjs >正文

离型剂技术支持东莞网站建设学电商出来一般干什么工作

离型剂技术支持东莞网站建设,学电商出来一般干什么工作,做网站收会员费违法吗,重庆网站建设怎么样目录 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 代码实现: 1.创建数组标记每个零件的每个工序是否完成。 2.创建数组存储每个零件的工序数量。 3.创建数组存储每个零件的工序时间。 4.初始化 5.设置下标 6.创建优先队列…

目录

问题描述

测试样例

 解题思路:

问题理解

数据结构选择

算法步骤

代码实现: 

1.创建数组标记每个零件的每个工序是否完成。 

2.创建数组存储每个零件的工序数量。

3.创建数组存储每个零件的工序时间。 

 4.初始化

5.设置下标 

6.创建优先队列 

 7.模拟整个零件加工

最终代码: 

运行结果: 


问题描述

小C、小U、小R是工厂里的三个工人,他们互相协同制作零件。零件的制作包括三种工序:"加工"、"质检"、"收尾",分别由小C、小U、小R负责。每个零件需要多次进行"加工"和"质检"工序,但只需要进行一次"收尾"工序。每次"加工"完成后,需要进行对应的"质检",只有当质检合格后,才可以开始下一次"加工"。当所有的"加工"和"质检"工序完成后,进行一次"收尾"工序,这样零件制作就算完成了。

小C、小U、小R的工作方式原本非常机械化,他们只能按照既定顺序一个工序一个工序地完成一个零件,比如对于一个零件的工序"加工1、质检1、加工2、质检2、收尾",他们会按顺序逐一完成各自的任务。

老板觉得这样太低效了,于是制定了新的加工方式:小C、小U、小R之间不应该互相等待,当他们因工序等待而被阻塞时,可以直接开始新零件的加工。但是每个工序在进行中不能被打断,必须连贯地完成。

例如,有5个零件,每个零件有7道工序,分别耗时如下:

零件一:10, 10, 10, 10, 10, 10, 20
零件二:10, 10, 10, 10, 10, 10, 20
零件三:10, 10, 10, 10, 10, 10, 20
零件四:10, 10, 10, 10, 10, 10, 20
零件五:10, 10, 10, 10, 10, 10, 20

(每一行的7个数字分别表示"加工1","质检1","加工2","质检2","加工3","质检3","收尾"的耗时)

假设零件按照5、4、3、2、1的优先级开始制作,优化后的工序流程中,小C、小U、小R会更加忙碌,避免空闲。

现在给你n个零件及每个零件的工序耗时,问在经过流程优化后,所有零件加工需要花费的总时间是多少?


测试样例

样例1:

输入:n = 5, parts = [[7, 10, 10, 10, 10, 10, 10, 20], [7, 10, 10, 10, 10, 10, 10, 20], [7, 10, 10, 10, 10, 10, 10, 20], [7, 10, 10, 10, 10, 10, 10, 20], [7, 10, 10, 10, 10, 10, 10, 20]]
输出:200

样例2:

输入:n = 3, parts = [[5, 10, 5, 10, 5, 10], [5, 2, 4, 6, 2, 10], [3, 10, 2, 5]]
输出:57

样例3:

输入:n = 4, parts = [[5, 7, 5, 8, 5, 7], [3, 5, 2, 7], [5, 3, 6, 4, 3, 6], [7, 7, 3, 4, 7, 3, 5, 6]]
输出:60

 解题思路:

问题理解

我们需要计算所有零件加工完成所需的总时间。每个零件的加工流程包括多个"加工"和"质检"工序,最后有一个"收尾"工序。小C、小U、小R可以并行工作,但每个工序必须连贯完成,不能被打断。

数据结构选择

  1. 零件列表std::vector<std::vector<int>> parts,其中每个子向量表示一个零件的工序耗时。
  2. 时间记录:我们可以使用三个变量来记录小C、小U、小R的当前时间,分别表示他们完成当前工序的时间点。

算法步骤

  1. 初始化:初始化小C、小U、小R的当前时间为0。
  2. 遍历零件:按照优先级遍历每个零件。
  3. 处理每个零件的工序
    • 对于每个零件的每个工序(加工、质检、收尾),计算小C、小U、小R完成该工序的时间。
    • 更新小C、小U、小R的当前时间,确保他们不会互相等待。
  4. 计算总时间:所有零件加工完成后,总时间即为小C、小U、小R中最后一个完成的时间。

代码实现: 

1.创建数组标记每个零件的每个工序是否完成。 

 

vector<vector<int>> flag(n, vector<int>(parts[0].size(), 0));

2.创建数组存储每个零件的工序数量。

vector<int> b(n);

3.创建数组存储每个零件的工序时间。 

vector<vector<int>> a(n);

 4.初始化

将parts里面的每一个工序的第一个零件放进对应的b数组里面,同时将第一个零件的时间都累加(已经加工了),然后把每一行的第二个到最后一个零件都放进a数组,最后标记flag数组的第一列的零件都为加工完成 

	for (int i = 0; i < n; ++i) {b[i] = parts[i][0];sum_jobs += b[i];a[i] = vector<int>(parts[i].begin() + 1, parts[i].end());flag[i][0] = 1;}

5.设置下标 

  1. time: 表示当前的时间点。
  2. m1m2m3: 分别表示当前加工、质检和收尾工序的结束时间。
  3. last1ilast1j: 记录上一次加工工序的零件索引和工序索引。
  4. last2ilast2j: 记录上一次质检工序的零件索引和工序索引。
  5. last3i: 记录上一次收尾工序的零件索引。

 

	int time = 0;int m1 = 0, m2 = 0, m3 = 0;int last1i = -1, last1j = -1;int last2i = -1, last2j = -1;int last3i = -1;

6.创建优先队列 

priority_queue<int, vector<int>, greater<int>> q;q.push(0);

 7.模拟整个零件加工

对于外循环:

  • q.top() 获取优先队列 q 中的最小时间值(因为 q 是一个最小堆)。
  • q.pop() 移除这个最小时间值。

内循环:

  • q.top() == time 检查队列顶部的下一个任务是否与当前时间 time 相同。
  • q.pop() 移除这个任务。

 

	while (sum_jobs > 0) {time = q.top();q.pop();while (!q.empty() && q.top() == time) {q.pop();}if (time == m3 && last3i != -1) {sum_jobs -= 1;}if (time == m2 && last2i != -1 && last2j != -1) {flag[last2i][last2j + 1] = 1;sum_jobs -= 1;}if (time >= m1) {if (time == m1 && last1i != -1 && last1j != -1) {flag[last1i][last1j + 1] = 1;sum_jobs -= 1;}// Get suitable m1bool found = false;for (int i = 0; i < n; ++i) {for (int j = 0; j < b[i]; j += 2) {if (flag[i][j] == 1 && j != b[i] - 1) {int temi = i, temj = j;flag[temi][temj] = 0;m1 = time + a[temi][temj];last1i = temi;last1j = temj;q.push(m1);found = true;break;}}if (found) break;}}if (time >= m2) {// Get suitable m2bool found = false;for (int i = 0; i < n; ++i) {for (int j = 1; j < b[i]; j += 2) {if (flag[i][j] == 1) {int temi = i, temj = j;flag[temi][temj] = 0;m2 = time + a[temi][temj];last2i = temi;last2j = temj;q.push(m2);found = true;break;}}if (found) break;}}if (time >= m3) {// Get suitable m3for (int i = 0; i < n; ++i) {if (flag[i][b[i] - 1] == 1) {int temi = i;flag[temi][b[temi] - 1] = 0;m3 = time + a[temi][b[temi] - 1];last3i = temi;q.push(m3);break;}}}}

 

 

 

 

 

 

最终代码: 

 

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>using namespace std;int solution(int n, vector<vector<int>> parts) {vector<vector<int>> flag(n, vector<int>(parts[0].size()+10, 0));//标记每个零件的每个工序是否完成vector<int> b(n,0);//保存每个零件的工序数量int sum_jobs = 0;vector<vector<int>> a(n);//存储每个零件的工序时间for (int i = 0; i < n; ++i) {b[i] = parts[i][0];sum_jobs += b[i];a[i] = vector<int>(parts[i].begin() + 1, parts[i].end());flag[i][0] = 1;}int time = 0;int m1 = 0, m2 = 0, m3 = 0;int last1i = -1, last1j = -1;int last2i = -1, last2j = -1;int last3i = -1;priority_queue<int, vector<int>, greater<int>> q;q.push(0);while (sum_jobs > 0) {time = q.top();q.pop();while (!q.empty() && q.top() == time) {q.pop();}if (time == m3 && last3i != -1) {sum_jobs -= 1;}if (time == m2 && last2i != -1 && last2j != -1) {flag[last2i][last2j + 1] = 1;sum_jobs -= 1;}if (time >= m1) {if (time == m1 && last1i != -1 && last1j != -1) {flag[last1i][last1j + 1] = 1;sum_jobs -= 1;}// Get suitable m1bool found = false;for (int i = 0; i < n; ++i) {for (int j = 0; j < b[i]; j += 2) {if (flag[i][j] == 1 && j != b[i] - 1) {int temi = i, temj = j;flag[temi][temj] = 0;m1 = time + a[temi][temj];last1i = temi;last1j = temj;q.push(m1);found = true;break;}}if (found) break;}}if (time >= m2) {// Get suitable m2bool found = false;for (int i = 0; i < n; ++i) {for (int j = 1; j < b[i]; j += 2) {if (flag[i][j] == 1) {int temi = i, temj = j;flag[temi][temj] = 0;m2 = time + a[temi][temj];last2i = temi;last2j = temj;q.push(m2);found = true;break;}}if (found) break;}}if (time >= m3) {// Get suitable m3for (int i = 0; i < n; ++i) {if (flag[i][b[i] - 1] == 1) {int temi = i;flag[temi][b[temi] - 1] = 0;m3 = time + a[temi][b[temi] - 1];last3i = temi;q.push(m3);break;}}}}return time;
}int main() {vector<vector<int>> parts1 = {{7, 10, 10, 10, 10, 10, 10, 20},{7, 10, 10, 10, 10, 10, 10, 20},{7, 10, 10, 10, 10, 10, 10, 20},{7, 10, 10, 10, 10, 10, 10, 20},{7, 10, 10, 10, 10, 10, 10, 20}};vector<vector<int>> parts2 = {{5, 10, 5, 10, 5, 10},{5, 2, 4, 6, 2, 10},{3, 10, 2, 5}};vector<vector<int>> parts3 = {{5,7,5,8,5,7},{3,5,2,7},{5,3,6,4,3,6},{7,7,3,4,7,3,5,6}};cout << (solution(5, parts1) == 200) << endl;cout << (solution(3, parts2) == 57) << endl;cout << (solution(4, parts3) == 60) << endl;return 0;
}

 

运行结果: 

 

 

http://www.dtcms.com/wzjs/179812.html

相关文章:

  • 网站域名保护几年全渠道营销管理平台
  • 网站建设与维护成绩查询在线超级外链工具
  • 做网店装修的网站有哪些北京企业网站seo平台
  • 网站导航如何用响应式做2345网址导航官方网站
  • 稿定设计在线ps优化关键词首页排行榜
  • 外挂网那个网站cf外挂做的好企业网络规划与设计
  • 动漫网站开发研究内容名词解释seo
  • 网站后台的关键词优化关键词的方法正确的是
  • 长沙靠谱的关键词优化太原seo招聘
  • 做p2p网站响应式网站 乐云seo品牌
  • 公司网站建设费用品牌型网站设计推荐
  • dw做的网站能搜到吗重庆森林经典台词独白
  • 爱看视频的网站沈阳百度推广排名优化
  • 软件科技公司网站模板下载网站权重查询工具
  • 济南开发网站老哥们给个关键词
  • 东莞长安做网站台州seo网站排名优化
  • 手机网站类型西安网站关键词优化费用
  • 建企业网站一般需要多少钱足球比赛统计数据
  • 中国石油天然气第六建设公司网站今天中国新闻
  • 寿光建设银行网站b2b网站大全免费
  • 十进十建 网站建设工作总结重庆网站seo推广公司
  • 鹰潭房产网站建设竞价托管优化公司
  • 嘉兴做网站优化公司网络营销活动推广方式
  • 百度做app的网站高级搜索引擎技巧
  • 关于动漫制作专业seo项目完整流程
  • 建设网站的公司有哪些知乎企业网站seo诊断工具
  • 上海网站建设费用多少怎么才能在百度上做引流呢
  • 大学两学一做专题网站男生技能培训班有哪些
  • 网站安全 扫描免费个人网站源码
  • 网站代码的重点内容是什么猪八戒网接单平台