Cod sursa(job #774689)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 6 august 2012 13:27:43
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
 # include <fstream>
 # include <cstring>
 # include <algorithm>
 # include <vector>
 
 # define dim 3505 
 
 using namespace std;
 
 ifstream f("cutii.in");
 ofstream g("cutii.out");
 
 int n, t;
 
 struct cutie
 {
	 int X, Y, Z;
 };
 
 cutie a[ dim ];
 int dm[ dim ], dp[ dim ];
 
 inline bool cmp( cutie a, cutie b )
 {
	 if ( a.X == b.X && a.Y == b.Y )
		 return a.Z < b.Z;
	 else
	 if ( a.X == b.X )
		 return a.Y < b.Y;
	 else
		 return a.X < b.X;
 }
 
 void afiseaza()
 {
	 int i;
	 for ( i = 1 ; i <= n ; i++ )
		 g << a[ i ].X << " " << a[ i ].Y << " " << a[ i ].Z << "\n";
	 g << "\n";
 }
 
 void init()
 {
	 int i;
	 for ( i = 1 ; i <= n ; i++ )
		 dp[ i ] = 0;
 }
 
 void rezolva()
 {
	 int i, j, maxim, sol = 1;
	 
	 dp[ n ] = 1;
	 
	 for ( i = n - 1 ; i >= 1 ; i-- )
	 {
		 maxim = 0;
		 for ( 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 && maxim < dp[ j ] )
				 maxim = dp[ j ];
			 dp[ i ] = maxim + 1;
			 if ( sol < dp[ i ] )
				 sol = dp[ i ];
	 }
	 
	// for ( i = 1 ; i <= n ; i++ )
	//	 g << dp[ i ] << " ";
	// g << "\n";
	 
	 g << sol << "\n";
 }
 
 void citire()
 {
	 int i, j;
	 
	 f >> n >> t;
	 
	 for ( i = 1 ; i <= t ; i++ )
	 {
		 for ( j = 1 ; j <= n ; j++ )
			 f >> a[ j ].X >> a[ j ].Y >> a[ j ].Z;
		 sort( a + 1, a + n + 1, cmp );
		 rezolva();
		 init();
		 //afiseaza();
	 }
 }
 
 int main()
 {
	 citire();
	 return 0;
 }