Cod sursa(job #731253)

Utilizator soriynSorin Rita soriyn Data 7 aprilie 2012 20:03:35
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream>
#include<algorithm>
#define maxn 3505

using namespace std;

ifstream in("cutii.in");
ofstream out("cutii.out");

typedef struct cutie
{
	short int nr;
	short int vec[4];
};

short int dp[maxn],maxim,p,t;
cutie a[maxn];


int m,n;

bool cmp(cutie a,cutie b)
{
	for(int i=1;i<=3;i++)
		if(a.vec[i]<b.vec[i]) return 1;
	    else if(a.vec[i]>b.vec[i])return 0;
		return 0;
}

bool check(int x,int y) 
{
	for(int i=1;i<=3;i++)
		if(a[x].vec[i]>=a[y].vec[i]) return 0;
	return 1;
}


void solve()
{
	maxim=0;
	for(int i=1;i<=m;i++)
		sort(a[i].vec+1,a[i].vec+3+1);
	sort(a+1,a+m+1,cmp);
	memset(dp,0,sizeof(dp));
		dp[m]=1;
	for(int i=m-1;i>=1;i--)
	   for(int j=i+1;j<=m;j++)
		   if(check(i,j))
			   {
				   if(dp[j]+1>dp[i])
					   dp[i]=dp[j]+1;
				   if(dp[i]>maxim) maxim=dp[i];
		        }
		   

    if(maxim==0) out<<"1\n1";
        out<<maxim<<"\n";
}

void read()
{
	in>>m>>t;
	for(int i=1;i<=t;i++)
	{
		for(int i=1;i<=m;i++)
		{
			a[i].nr=i;
			for(int j=1;j<=3;j++)
				in>>a[i].vec[j];
		}
		solve();
	}
}


int main()
{
	read();
}