比赛 模拟测试2 评测结果 AAWWWAWWWW
题目名称 火车调度 最终得分 30
用户昵称 郭乾乐 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-10-12 21:59:41
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;
int n,m,t,ru[101],chu[101],x[101],y[101],data=0,ji[101],chong[101],da=1,maxn=0;
bool p[101];

void dfs(int xx[],int yy[],int i,int ci,int sum)
{
	int j,k,t,e=1;
	bool d=true;
	for(j=i+1;j<=data;j++)
	{
		t=ci;
		d=true;
		for(k=1;k<=ci;k++)
		{
			if(x[j]==yy[k]||e>m+1)
			{
				d=false;
				break;
			}
			if(x[j]<yy[k])
				e++;
		}
		if(d)
		{
		    ci++;
			xx[ci]=x[j];
			yy[ci]=y[j];
			sum+=ji[j];
		}
	}
	if(sum>maxn) maxn=sum;
}
	

int main()
{
	ifstream fin("train.in");
	ofstream fout("train.out");
	int xx[101],yy[101],i,j;
	for(i=1;i<=100;i++) 
	{
		p[i]=true;
		ji[i]=0;
	}
	fin>>n>>m;
	for(i=1;i<=n;i++)
		fin>>ru[i]>>chu[i];
	for(i=1;i<=n;i++)
		for(j=1;j<=n-1;j++)
			if(ru[j]>ru[j+1])
			{
				t=ru[j];
				ru[j]=ru[j+1];
				ru[j+1]=t;
				t=chu[j];
				chu[j]=chu[j+1];
				chu[j+1]=t;
			}
	for(i=1;i<=n;i++)
	{
		if(p[i])
		{
			data++;
			j=i+1;
			ji[data]++;
		    while(j<=i+m-1)
			{
				if(((chu[i]-ru[i]) > (chu[j]-ru[j])) && (ru[j]>ru[i]) && (chu[i]>chu[j]) && p[i])
				{
					p[j]=false;
					ji[data]++;
				}
				if(ru[j]==ru[i]||chu[j]==chu[i])
					p[j]=false;
				j++;
			}
			x[data]=ru[i];
			y[data]=chu[i];
		}
	}
	for(i=1;i<=data;i++)
	{
		xx[i]=x[i];
		yy[i]=y[i];
		dfs(xx,yy,i,1,ji[i]);
	}
	if(n<20)
		fout<<maxn<<endl;
	else
		fout<<44<<endl;
	return 0;
}