Pagini recente » Istoria paginii runda/hc_bonus_round/clasament | Cod sursa (job #2014398) | Cod sursa (job #2362844) | Cod sursa (job #2402271) | Cod sursa (job #1772453)
#include <iostream>
#include <cstdio>
#define NMAX 21
#define SMAX 100000
using namespace std;
int N,M,X;
int dp[2][SMAX],a[NMAX][NMAX];
int v[NMAX*NMAX],k;
int Smin,Smax;
void citire()
{
scanf("%d%d%d",&N,&M,&X);
}
void calcS()
{
for(int i=1; i<=N; i++)
for(int j=1; j<=M; j++)
{
Smax += i*j;
v[++k]=i*j;
}
Smin = -Smax;
}
void rezolva()
{
if(X<Smin || X>Smax)
{
printf("0\n");
return;
}
int target = X - Smin;
dp[0][0]=1;
dp[1][0]=1;
int I=1;
for(int i=1; i<=k; i++)
{
for(int j=1; j<=target; j++)
{
int s = 0;
s += dp[I^1][j];
if(j-v[i]>=0)
s+=dp[I^1][j-v[i]];
if(j-2*v[i]>=0)
s+=dp[I^1][j-2*v[i]];
dp[I][j] = s%10000;
}
I=I^1;
}
//dp[i][j] = (dp[i-1][j] + dp[i-1][j-v[i]] + dp[i-1][j-2*v[i]])%10000;
printf("%d\n",dp[I^1][target]);
}
int main()
{
freopen("diamant.in","r",stdin);
freopen("diamant.out","w",stdout);
citire();
calcS();
rezolva();
return 0;
}