Cod sursa(job #51818)

Utilizator peanutzAndrei Homorodean peanutz Data 16 aprilie 2007 22:00:42
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <memory.h>
#define SHIFT 50100
#define NMAX (SHIFT*2 + 1000)
long a[NMAX], b[NMAX];

const int MIJLOC = SHIFT/2;

int n, m;
long x;

void dinamic()
{
	long i, j, k;

	a[MIJLOC] = 1;
	a[MIJLOC-1] = a[MIJLOC+1] = 1;

	for(i = 1; i <= n; ++i)
	{
		if(i != 1)
			j = 1;
		else
			j = 2;

		for(; j <= m; ++j)
		{
			memcpy(b, a, sizeof(a));
			for(k = 0; k <= SHIFT*2; ++k)
			{
				if(a[k])
				{
					//if(k != MIJLOC && b[k] != 1)
					b[k - i*j] += a[k];
					b[k + i*j] += a[k];
				}
			}
			memcpy(a, b, sizeof(b));
		}
	}
}

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

	scanf("%d %d %ld\n", &n, &m, &x);

	dinamic();

	printf("%ld\n", a[x + MIJLOC]);

	fclose(stdin);
	fclose(stdout);

	return 0;
}