记录编号 262141 评测结果 AAAAAAAAAA
题目名称 [NOIP 2006]作业调度方案 最终得分 100
用户昵称 GravatarRiolu 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2016-05-19 19:37:18 内存使用 0.52 MiB
显示代码纯文本
//Riolu 2016-5-19
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 9999
using namespace std;

int n,m;
struct note {
	int shang;
	int gongxu;
	int jihao[21];
	int shijian[21];
	}xinxi[21];
bool jiqi[21][N];//模拟机器时间
int muqian[21];
int shunxu[401];

int fang(int s,int t,int num){
	int flag=1,i;
	for(i=s;i<=t;i++)	if(jiqi[num][i])
		{flag=0;break;}
		return flag;
	}
	
int main()
{
	freopen("jsp.in","r",stdin);
	freopen("jsp.out","w",stdout);
	int i,j,maxt=0;
	cin>>m>>n;
	for(i=1;i<=m*n;i++)	cin>>shunxu[i];
	for(i=1;i<=n;i++) 	for(j=1;j<=m;j++)	cin>>xinxi[i].jihao[j];
	for(i=1;i<=n;i++) 	for(j=1;j<=m;j++)	cin>>xinxi[i].shijian[j];
	for(i=1;i<=n;i++)	{xinxi[i].gongxu=0;xinxi[i].shang=0;}
		
	for(i=1;i<=m*n;i++){
		int k=shunxu[i];xinxi[k].gongxu++;
		int num=xinxi[k].jihao[xinxi[k].gongxu];
		int tim=xinxi[k].shijian[xinxi[k].gongxu];
		int flag=1;
		for(j=xinxi[k].shang+1;j+tim-1<=muqian[num];j++)
			if(fang(j,j+tim-1,num)){
				flag=0;	xinxi[k].shang=j+tim-1; 
				for(int ii=j;ii<=j+tim-1;ii++)	jiqi[num][ii]=true;
				break;
				}
		if(flag){
			int start =muqian[num]>xinxi[k].shang?muqian[num]:xinxi[k].shang;
			for(int ii=1;ii<=tim;ii++)	jiqi[num][ii+start]=true;
			muqian[num]=tim+start; xinxi[k].shang=muqian[num]; 
			}
		}
		
		for(i=1;i<=m;i++) maxt= muqian[i]>maxt?muqian[i]:maxt;
		//for(i=1;i<=m;i++) cout<<muqian[i]<<endl;
		cout<<maxt;
	}