Pagini recente » Cod sursa (job #1405060) | Cod sursa (job #353797) | Cod sursa (job #1111466) | Cod sursa (job #3211273) | Cod sursa (job #878178)
Cod sursa(job #878178)
# include <fstream>
# include <cstring>
# include <algorithm>
# include <vector>
# define dec 44200
# define mod 10000
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
int N, M ,X;
int dp[ 3 ][ dec + 50 ];
int lim;
int sol;
int main()
{
int i, j, k, ind = 1, val = 0;
f >> N >> M >> X;
for ( i = 1 ; i <= N ; i++ )
for ( j = 1 ; j <= M ; j++ )
lim += i * j;
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 ] ) % mod;
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 ] ) % mod;
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++;
}
g << sol;
return 0;
}