【NOIP2006】作业调度方案

Description

我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。
每 个工件的每个工序称为一个操作,我们用记号 j-k 表示一个操作,其中 j 为 1 到 n 中的某个数字,为工件号; k 为 1 到 m
中的某个数字,为工序号,例如 2-4 表示第 2 个工件第 4 道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。
例 如,当 n=3 , m=2 时,“ 1-1 , 1-2 , 2-1 , 3-1 , 3-2 , 2 -2 ”
就是一个给定的安排顺序,即先安排第 1 个工件的第 1 个工序,再安排第 1 个工件的第 2 个工序,然后再安排第 2 个工件的第 1
个工序,等等。
一方面,每个操作的安排都要满足以下的两个约束条件。
(1) 对同一个工件,每道工序必须在它前面的工序完成后才能开始;
(2) 同一时刻每一台机器至多只能加工一个工件。
另一方面,在安排后面的操作时,不能改动前面已安排的操作的工作状态。
由于同一工件都是按工序的顺序安排的,因此,只按原顺序给出工件号,仍可得到同样的安排顺序,于是,在输入数据中,我们将这个安排顺序简写为“ 1 1 2 3 3 2 ” 。
还要注意,“安排顺序”只要求按照给定的顺序安排每个操作。不一定是各机器上的实际操作顺序。在具体实施时,有可能排在后面的某个操作比前面的某个操作先完成。
例如,取 n=3,m=2 ,已知数据如下:


一个操作插入到某台机器的某个空档时(机器上最后的尚未安排操作的部分也可以看作一个空档),可以靠前插入,也可以靠后或居中插入。为了使问题简单一些,
我们约定:在保证约束条件( 1 )( 2 )的条件下,尽量靠前插入。并且,我们还约定,如果有多个空档可以插入,就在保证约束条件( 1 )( 2
)的条件下,插入到最前面的一个空档。于是,在这些约定下,上例中的方案一是正确的,而方案二是不正确的。
显然,在这些约定下,对于给定的安排顺序,符合该安排顺序的实施方案是唯一的,请你计算出该方案完成全部任务所需的总时间。

Input

第 1 行为两个正整数,用一个空格隔开:m n(其中 m ( <20 )表示机器数, n ( <20 )表示工件数)
第 2 行: m * n个用空格隔开的数,为给定的安排顺序。
接下来的 2n 行,每行都是用空格隔开的 m 个正整数,每个数不超过 20 。
其中前 n 行依次表示每个工件的每个工序所使用的机器号,第 1 个数为第 1 个工序的机器号,第 2 个数为第 2 个工序机器号,等等。
后 n 行依次表示每个工件的每个工序的加工时间。
可以保证,以上各数据都是正确的,不必检验。

Output

只有 一个正整数,为最少的加工时间。

Sample Input

2 3
1 1 2 3 3 2
1 2
1 2
2 1
3 2
2 5
2 4

Sample Output

10

Hint

Source

NOIP2006
贪心 , 模拟

解析

一开始看这题似乎挺难的。。

后来仔细读题,

好像直接模拟就行了。

再看数据范围,

直接简单粗暴地用暴力。

结果就AC了。

贴AC代码:

#include <bits/stdc++.h>
using namespace std; int n,m;
int a[][]/*顺序*/,sum[]/*第i件工件目前的工序*/;
int ma[][]/*第i件第j道的机器*/,ti[][]/*第i件第j道的时间*/;
int f[][]/*机器*/,ans,d[][]; int main(){
scanf("%d%d",&m,&n);
for(int i=;i<=n*m;i++){
scanf("%d",&a[i][]);
a[i][]=++sum[a[i][]]/*当前是第几道工序*/;
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&ma[i][j]);
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&ti[i][j]);
}
}
for(int i=;i<=n*m;i++){
int x=a[i][]/*工件*/,y=a[i][]/*工序*/;
int p=ma[x][y]/*机器*/,q=ti[x][y]/*时间*/;
int k=d[x][y-]+,cnt=;
while(){
if(f[p][k]==) cnt++;
else cnt=;
if(cnt==q) break;
k++;
}/*寻找最前面的满足时间的空档*/
d[x][y]=k/*x件y道完成的时间*/;
ans=max(ans,k);
for(int j=;j<q;j++){
f[p][k-j]=;
}
}
printf("%d\n",ans);
return ;
}

题解 【NOIP2006】作业调度方案的更多相关文章

  1. NOIP2006 作业调度方案

    1.             作业调度方案 (jsp.pas/c/cpp) [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工 ...

  2. 洛谷P1065 作业调度方案

    P1065 作业调度方案 题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作 ...

  3. 洛谷 P1065 作业调度方案

    P1065 作业调度方案 题目描述 我们现在要利用 mm 台机器加工 nn 个工件,每个工件都有 mm 道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每 ...

  4. P1065 作业调度方案——小模怡情,大模伤身

    P1065 作业调度方案 一个有点费手的“小”%%拟: 题都差点没读明白……: 每个机器所能完成的工序是不一样的: 每个物品完成工序的机器是指定的: 按照题面说的按时间轴推下去就行了: 没有时间上界有 ...

  5. 【NOIP2006】作业调度方案 {语文难题}

    Description: 我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间.  每个工件的每个工序称为一个 ...

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

    题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...

  7. 【题解】洛谷P1065 [NOIP2006TG] 作业调度方案(模拟+阅读理解)

    次元传送门:洛谷P1065 思路 简单讲一下用到的数组含义 work 第i个工件已经做了几道工序 num 第i个工序的安排顺序 finnish 第i个工件每道工序的结束时间 need 第i个工件第j道 ...

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

    点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int m, n, ans = 0; ...

  9. 【b603】作业调度方案

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的 ...

随机推荐

  1. 【转贴】内存重要参数详解 RAS CAS

    内存重要参数详解 RAS CAS 分类: LINUX 2014-09-12 09:41:58 原文地址:内存重要参数详解 RAS CAS 作者:Reny http://blog.chinaunix.n ...

  2. [转]Mybatis之TypeHandler使用教程

    Mybatis之TypeHandler使用教程 https://blog.csdn.net/jokemqc/article/details/81326109 深入浅出Mybatis系列(五)---Ty ...

  3. XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法

    XSSFWorkbook对象的write方法内会将传入的资源流自动关闭 导致下载excel失败 错误代码 OutputStream out = response.getOutputStream(); ...

  4. php 处理图片 将图片转成base64

    1.直接将图片路径传入下面该方法就可以了//将图片转成base64 public function imgToBase64($img_file){ $img_base64 = ''; if ($img ...

  5. Neo4j

    Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做 ...

  6. Idea中maven的设置

    File->setting    输入MAVEN     看到右侧设置情况     Maven home directory 熟路本地moven 仓库目录:D:/springboot/apach ...

  7. Timezone offset does not match system offset: 0 != -32400. Please, check your config files

    apscheduler使用uWSGI的mule模块部署的时候报错, 因为系统时区和代码运行时区不一样导致. 解决办法:在初始化的时候指定上海的时区 scheduler = BlockingSchedu ...

  8. Spring、SpringMVC版本及配置

    一.Spring版本 Spring的最新版本是Spring 5.x,Spring 4.x的最后版本是Spring 4.3.x,会维护到2020年(Spring的GitHub主页对此有说明). 二.Sp ...

  9. JAVA生成验证码代码

    生成base64格式图片验证码 /** * 验证码的候选内容 */ private char codeSequence[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', ...

  10. 给postmessage加上callback方法

    postmessage双向通信中,是不能使用回调函数的. window.postmessage({msg:'hello',callback:function(e){ do something with ...