点击查看代码
#include<bits/stdc++.h>

using namespace std;
const int N = 1e6 + 10;
int m, n, ans = 0;
int lists[500];
int steps[25];
int machine[25][N];
int last_time[25];
struct information {
int id;
int cost;
}a[25][25];
int main()
{
cin >> m >> n;
for (int i = 1; i <= m * n; i++)
cin >> lists[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j].id;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j].cost;
for (int i = 1; i <= m * n; i++) {
int now = lists[i];
steps[now]++;
int id = a[now][steps[now]].id, cost = a[now][steps[now]].cost;
int s = 0;
for (int j = last_time[now] + 1; ; j++) {
if (machine[id][j] == 0) s++;
else s = 0;
if (s == cost) {
for (int k = j - cost + 1; k <= j; k++)
machine[id][k] = 1;
if (ans < j) ans = j;
last_time[now] = j;
break;
}
}
}
cout << ans;
return 0;
}

此题的标签为模拟,我们可以定义一些数组和结构体来储存题干的信息:lists[i] 用来表示安排顺序,steps[i] 表示工件i所处的工序数,machine[i][j] 表示第i个机器目前处在时间轴上的第j个时间,last_time[i] 表示第i个工件现在处在时间轴上的时间(之后我会具体解释),a[i][j].id 表示第 i 个工件的第 j 个工序的机器号,a[i][j].cost 表示第 i 个工件的第 j 个工序的加工时间。在进行模拟时,有 3 个条件需要满足:(1)要按照题干的安排顺序进行加工(2)机器的加工时间在时间轴上是从 0 开始向右走(3)每个工件的各个工序在时间轴上对应的时间也是没有重叠部分的,我们之前定义的 last_time[i] 就是为了表示第i个工件目前所处的时间,当下一次轮到工件i的工序时,要从 last_time[i] 开始,这样才能保证在时间上没有冲突。

来分析一下程序的主要部分,用 now 存储 lists[i] 当前对应的工件,steps[now] ++ 后即为此时工件所对应的工序号,使用 id 和 cost 来存储当前的机器号和加工时间,定义一个变量 s ,以便后续判断何时能够加工,循环变量 j 从 last_time[now] + 1 开始(为了满足条件3),进行循环,直到找到能够满足加工时间的时间段,记录下完成目前这项工序的时间j,做以下操作:(1)将满足的这段时间在机器上标记为占用,也就是 machine[id][k] = 1(2)如果此时的时间已经超过了之前的总时间 ans ,就执行 ans = j(因为我们要找的是满足题干所有情况的最短时间,相当于是求交集)(3)将工件 now 的 last_time[now] 更新为 j(4)退出循环

最后找到的ans就是满足条件的最短加工时间

[洛谷] P1065 [NOIP2006 提高组] 作业调度方案的更多相关文章

  1. 洛谷P1083 [NOIP2012提高组Day2T2]借教室

    P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...

  2. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  3. 洛谷 P2678 & [NOIP2015提高组] 跳石头

    题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...

  4. 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)

    题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...

  5. 洛谷P1514 [NOIP2010提高组T4]引水入城

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...

  6. 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

  7. 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交

    P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...

  8. 洛谷P1313 [NOIP2011提高组Day2T1]计算系数

    P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别 ...

  9. 洛谷P1003 [NOIP2011提高组Day1T1]铺地毯

    P1003 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号 ...

随机推荐

  1. 如何在网上找MySQL数据库的JDBC驱动jar包?

    当我们在开发程序,涉及数据库时,总是需要用到相应的jar包,这不小编就给大家介绍一下如何下载相应的jar包 方法/步骤   1 在百度搜索栏上搜索MySQL 2 选择Downloads 3 选择 Co ...

  2. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动 的区别在哪里?

    Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联 集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.而 Mybatis 在查询关联对象或关联集 ...

  3. ApplicationContext 通常的实现是什么?

    FileSystemXmlApplicationContext :此容器从一个 XML 文件中加 载 beans 的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数. ClassPat ...

  4. We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.

    今天遇到一个问题为 vue请求得到的响应为 We're sorry but demo3 doesn't work properly without JavaScript enabled. Please ...

  5. pandas - drop()函数

    函数形式:DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors ...

  6. 攻防世界supersqli

    supersqli 补充知识点 rename 命令格式: rename table 原表名 to 新表名 例如,在表myclass名字更改为youclass: mysql>rename tabl ...

  7. 分享一个自己写的基于canvas的原生js图片爆炸插件

    DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...

  8. H5移动端开发

    开发前准备 环境: Node.js LTS版本 git 最新版 文档: 本项目技术栈基于 ES2016 VueJS vux 快速开始 1.克隆项目 git clone https://gitee.co ...

  9. SQLite实现数据库的储存2+SQLite数据库可视化工具SQLite Stadio

    今日所学 SQLite实现数据库的储存 查看数据库的两种方法 Android 中 SQLite 数据库的查看 - woider - 博客园 SQLite Studio安装教程 [SQLite]可视化工 ...

  10. 利用es6解构赋值快速提取JSON数据;

    直接上代码 { let JSONData = { title:'abc', test:[ { nums:5, name:'jobs' }, { nums:11, name:'bill' } ] } l ...