Cod sursa(job #923414)

Utilizator horatiu13Horatiu horatiu13 Data 23 martie 2013 14:55:42
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
/*
http://www.infoarena.ro/problema/cutii
Se dau N cutii paralelipipedice prin dimensiunile lor (X, Y si Z). Se stie ca o 
cutie se poate pune in alta doar daca toate dimensiunile ei sunt strict mai mici 
cele ale cutiei in care va fi bagata. Se cere numarul maxim de cutii ce pot fi 
selectate din cele N astfel incat ele sa poata fi "cuibarite" (o cutie va contine 
o cutie care la randul ei va contie o alta s.a.m.d. pana la cea mai mica care nu 
va mai contine nimic).


cutii.in
3 2
1 1 1
2 2 2
3 3 3
1 2 2
2 1 1
3 3 3

cutii.out
3
2
*/

#include<stdio.h>
#define MAX 3500

struct cutie
{
	int x;
	int y;
	int z;
}v[MAX];

int t;
int n;
int bst[MAX];

int dinamica()
{
	int maxim=~(1<<31)+1;
	int i, j;
	for(i=2; i<=n; i++)
		for(j=1; j<i; j++)
			if(v[i].x>v[j].x && v[i].y>v[j].y && v[i].z>v[j].z && bst[i] < bst[j]+1)
			{
				bst[i]=bst[j]+1;
				if(maxim<bst[i])
					maxim=bst[i];
			}
	return maxim;
}

void citire()
{
	FILE *g=fopen("cutii.in", "r");
	FILE *f=fopen("cutii.out", "w");
	int i;
	fscanf(g, "%d%d", &n, &t);
	for(; t; t--)
	{
		
		for(i=1; i<=n; i++)
		{
			fscanf(g, "%d%d%d", &v[i].x, &v[i].y, &v[i].z);
			bst[i]=1;
		}
		fprintf(f, "%d\n", dinamica());
	}
}

int main()
{
	citire();
	return 0;
}