Pagini recente » Cod sursa (job #1052189) | Cod sursa (job #1213529) | Cod sursa (job #2920166) | Cod sursa (job #1170348) | Cod sursa (job #923414)
Cod sursa(job #923414)
/*
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;
}