Cod sursa(job #65808)

Utilizator peanutzAndrei Homorodean peanutz Data 12 iunie 2007 16:48:06
Problema Plantatie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#define NMAX 130

int n, m;
int a[NMAX][NMAX][NMAX];//a[i][j][k] = max(a[i][j][k-1], a[i+1][j][k-1], a[i][j+1][k-1], a[i+1][j+1][k-1]);

inline int max(int a, int b) { return (a > b) ? a : b; }

void read()
{
	int i, j;
	scanf("%d %d", &n, &m);

    if(n >= NMAX)
         n = NMAX-1;

	for(i = 1; i <= n; ++i)
	{
		for(j = 1; j <= n; ++j)
			scanf("%d", &a[i][j][1]);
	}
}

void dinamic()
{
	int i, j, k;
	int aux;
	for(i = n-1; i > 0; --i)
	{
		for(j = n-1; j > 0; --j)
		{
			//aux = max(i, j);
			aux = (n-i+1)*(n-j+1);
			for(k = 2; k < NMAX; ++k)
				a[i][j][k] = max(max(a[i][j][k-1], a[i+1][j][k-1]), max(a[i][j+1][k-1], a[i+1][j+1][k-1]));
		}
	}
}

int main()
{
	freopen("plantatie.in", "r", stdin);
	freopen("plantatie.out", "w", stdout);

	read();
	dinamic();

	int i, j, k;
	//scanf("%d", &m);
	while(m--)
	{
		scanf("%d %d %d\n", &i, &j, &k);

            if(i >= NMAX)
                 i = NMAX-1;
            if(j >= NMAX)
                 j = NMAX-1;
            if(k >= NMAX)
                 k = NMAX-1;

		printf("%d\n", a[i][j][k]);
	}
	fclose(stdin);
	fclose(stdout);

	return 0;
}