Cod sursa(job #442717)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 14 aprilie 2010 23:57:40
Problema Cutii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct cub
{
	int x,y,z;
};
cub a[1<<12];
int n,t,maxim,maximc,v[1<<12],cost[1<<12];
bool f[1<<12];
vector<int> L[1<<12];
bool comp(const cub &A,const cub &B)
{
	if(A.x<B.x) return false;
	if(A.x>B.x) return true;
	if(A.y<B.y) return false;
	if(A.y>B.y) return true;
	if(A.z<B.z) return false;
	return true;
}
void df(int nod,int lung)
{
	if(lung>maximc)
		maximc=lung;
	for(vector<int>::iterator it=L[nod].begin();it!=L[nod].end();it++)
		if(cost[*it])
		{
			if(lung+cost[*it]>maximc)
				maximc=lung+cost[*it];
			return;
		}
		else df(*it,lung+1);
}
int main()
{
	freopen("cutii.in","r",stdin);
	freopen("cutii.out","w",stdout);
	scanf("%d%d",&n,&t);
	for(;t>=1;t--)
	{
		for(int i=1;i<=n;i++)
			scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
		sort(a+1,a+n+1,comp);
		for(int i=1;i<=n;i++)
			for(int j=i+1;j<=n;j++)
				if(a[i].x>a[j].x && a[i].y>a[j].y && a[i].z>a[j].z)
					L[i].push_back(j);
		maxim=0;
		for(int i=1;i<=n;i++)
		{
			maximc=0;
			df(i,1);
			cost[i]=maximc;
			if(maximc>maxim)
				maxim=maximc;
		}
		printf("%d\n",maxim);
		for(int i=1;i<=n;i++)
		{
			L[i].clear();
			cost[i]=0;
		}		
	}
	return 0;
}