Pagini recente » Cod sursa (job #2088039) | Cod sursa (job #2748314) | Cod sursa (job #18575) | Cod sursa (job #1713796) | Cod sursa (job #878191)
Cod sursa(job #878191)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
# define dec 44150
# define mod 10000
using namespace std;
int N, M ,X;
int dp[ 3 ][ dec + 50 ];
int lim;
int sol;
int main()
{
int i, j, k, ind = 1, val = 0;
freopen ("diamant.in", "r", stdin);
freopen ("diamant.out", "w", stdout);
//f >> N >> M >> X;
scanf ("%d %d %d", &N, &M, &X);
for ( i = 1 ; i <= N ; ++i )
for ( j = 1 ; j <= M ; ++j )
lim += i * j;
if ( X >= dec || X <= -dec )
printf ("0");
//g << 0 << "\n";
else
{
dp[ 0 ][ dec ] = 1;
for ( i = 1 ; i <= N ; ++i )
for ( j = 1 ; j <= M ; ++j )
{
val = ind % 2;
for ( k = -lim ; k <= lim ; ++k )
{
dp[ val ][ k + dec ] = 0;
if ( k - i * j >= - dec ) // ca sa nu dea KBS,si sa nu adun o suma mai mica decat totalul elementelor "diamantelor"
dp[ val ][ k + dec ] = ( dp[ val ][ k + dec ] + dp[ !val ][ k - i * j + dec ] );
if ( k + i * j <= 2 * dec ) // ca sa nu adun o suma mai mare decat totalul elementelor "diamantului"
dp[ val ][ k + dec ] = ( dp[ val ][ k + dec ] + dp[ !val ][ k + i * j + dec ] );
dp[ val ][ k + dec ] = ( dp[ val ][ k + dec ] + dp[ !val ][ k + dec ] ) % mod;// adun si sumele submultimii de ind - 1 diamante,ca in rucsac
if ( k == X && ind == N * M )
sol = dp[ val ][ k + dec ];
}
// afisare( val );
ind++;
}
printf ("%d", sol );
}
return 0;
}