[洛谷] P1065 [NOIP2006 提高组] 作业调度方案



点击查看代码
#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 提高组] 作业调度方案的更多相关文章
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- 洛谷 P2678 & [NOIP2015提高组] 跳石头
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...
- 洛谷 P1025 & [NOIP2001提高组] 数的划分(搜索剪枝)
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个 ...
- 洛谷P1514 [NOIP2010提高组T4]引水入城
P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城 ...
- 洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...
- 洛谷P1313 [NOIP2011提高组Day2T1]计算系数
P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别 ...
- 洛谷P1003 [NOIP2011提高组Day1T1]铺地毯
P1003 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号 ...
随机推荐
- 高度不定,宽100%,内一div高不确定,如何实现垂直居中?
verticle-align: middle; 绝对定位50%加translateY(-50%) 绝对定位,上下左右全0,margin:auto
- 使用 Spring Cloud 有什么优势?
使用 Spring Boot 开发分布式微服务时,我们面临以下问题 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题. 服务发现-服务发现工具管理群集中的流程和服务如何查找 ...
- ubuntu开启emqx/nginx/uwsgi自启动服务
一.emqx开机自启 a.首先在执行如下命令 vi /lib/systemd/system/emqx.service 创建了emqx.service文件然后在文件中写入如下内容 [Unit] Des ...
- 使用mqtt+ssl加密 WebSocket 客户端连接 MQTT 服务器以及ws+wss协议
上篇用TLS/SSL保证EMQ的网络传输安全讲了使用自签ca加密MQTT传输数据,如果mqtt用在web端,如何使用ssl.tsl加密? 1.web客户端 // 引入mqtt.min.js // 将在 ...
- spring-boot-learning-MongoDB
NoSQL可以极大提高互联网系统的性能,但是它有一些致命的缺陷,其中最为严重的就是计算功能卡分有限,例如,在一个10 万数据量的List 中,我只需要满足特定条件的元素在Red is 中,使用集合或者 ...
- Three.js 实现3D开放世界小游戏:阿狸的多元宇宙 🦊
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 2545光年之外的开普勒1028星系,有一颗色彩斑斓的宜居星球 ,星际移民 ...
- 汽车中的低速can和高速can的区别
转自:https://zhuanlan.zhihu.com/p/33212308
- shell脚本编程(一) 变量、条件判断、循环
目录 1. shell脚本编程 2. 运行 Shell 脚本有两种方法 3. 变量 4. 本地变量 5. 环境变量 6. 参数变量 7. 多行注释 8. if条件判断 ...
- vim recording的使用方法
使用vim时无意间触碰到q键,左下角出现"recording"这个标识,觉得好奇,遂在网上查了一下,然后这是vim的一个强大功能.他可以录 制一个宏(Macro),在开始记录后,会 ...
- _CrtCheckMemory
参考: _CrtCheckMemory MSDN 堆异常检查-MS vs stdio 编写程序经常会涉及到堆的申请,但是如果你向所申请堆里写数据,超过了你最开始申请的空间是,运行中就会发生中断. _C ...