Cod sursa(job #3707)

Utilizator shadowmanAlex Matei shadowman Data 28 decembrie 2006 00:09:21
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <stdlib.h>

int comp(const void* a, const void* b)
{
	int* v1 = ((int**)a)[0];
	int* v2 = ((int**)b)[0];

	if(v1[0] == v2[0])
	{
		if(v1[1] == v2[1])
		{
			return v1[2] - v2[2];
		}

		return v1[1] - v2[1];
	}

	return v1[0] - v2[0];
}

int getmax(int** v, int N)
{
	int* m = new int [N];
	int i, j;

	for(i = 0; i < N; i++)
	{
		m[i] = 1;

		for(j = 0; j < i; j++)
		{
			if(v[i][0] > v[j][0] && v[i][1] > v[j][1] && v[i][2] > v[j][2] && (m[j] + 1) > m[i])
			{
				m[i] = m[j] + 1;
			}
		}
	}

	return m[N - 1];
}

int main()
{
	freopen("cutii.in", "rt", stdin);
	freopen("cutii.out", "wt", stdout);

	int N, T, j, i;

	scanf("%d%d", &N, &T);

	int** v = new int*[N];

	for(i = 0 ; i < N; i++)
	{
		v[i] = new int [3];
	}

	for(j = 0; j < T; j++)
	{
		for(i = 0; i < N; i++)
		{
			scanf("%d%d%d", &v[i][0], &v[i][1], &v[i][2]);
		}

		qsort(v, N, sizeof(int**), comp);
		printf("%d\n", getmax(v, N));
	}

	return 0;
}