[洛谷] 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 .现在将这些地毯按照编号 ...
随机推荐
- 使用过滤器获取系统目录或文件名(java.io)
import java.io.File;import java.io.FilenameFilter; File[] file = new File("D:\\"); //使用Fil ...
- redis支持哪些数据类型?redis命令大全
一.redis支持的数据类型 1)String 常用命令:set/get/decr/incr/mget等: 应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类: ...
- Thymeleaf使用遇见的问题,如字符串不相等
所属情况:内联JavaScript语言 当使用Thymeleaf取请求参数的值时,会出现数组符号包围值的问题,可通过[0]进行取出里面的字符串,取值之前需先判断值是否存在,不然会抛出索引0不存在问题 ...
- 列举 IoC 的一些好处?
IoC 的一些好处是:它将最小化应用程序中的代码量.它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例 或 JNDI 查找机制.它以最小的影响和最少的侵入机制促进松耦合.它支持即时的实例 ...
- Spring配置连接池和 Dao 层使用 jdbcTemplate
1.Spring 配置 c3p0 连接池 (1)导入jar包(Maven项目) <dependency> <groupId>com.mchange</groupId> ...
- vulnhub靶机Tr0ll:1渗透笔记
Tr0ll:1渗透笔记 靶场下载地址:https://www.vulnhub.com/entry/tr0ll-1,100/ kali ip:192.168.20.128 靶机和kali位于同一网段 信 ...
- '\ddd'转义字符与八进制转换
所有的ASCII码都可以用"\"加数字(一般是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等, ...
- 创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky)
创建TypeScript代码模板(NVS+Yarn+ESLint+Prettier+Husky) Cui, Richard Chikun 本文笔者将带你在Github代码仓库创建TypeScript代 ...
- 登陆界面回车(enter)点击登陆;
<script>//注册按键事件document.onkeydown = keyListener;function keyListener(e) {// 当按下回车键,点buttonif ...
- python-汇率兑换
按照1美元=6人民币的汇率编写一个美元和人民币的双向兑换程序 输入格式: 输入人民币或美元的金额,人民币格式如:R100,美元格式如:$100 输出格式: 输出经过汇率计算的美元或人民币的金额,格式与 ...