Pagini recente » Cod sursa (job #3248255) | Cod sursa (job #2822113) | Cod sursa (job #717770) | Cod sursa (job #2706822) | Cod sursa (job #2139399)
#include <cstdio>
using namespace std;
const int lim = 88200;
const int Modulo = 10000;
int x,greutate;
int sirelemente[405];
int dp[2][lim+5];
void preparation(int n , int m)
{
dp[0][lim/2] = 1;
int aux = 1;
for(int i = 1 ; i <= n ; i++)
for(int j = 1; j <= m ; j++)
sirelemente[aux++]=i*j;
}
void backpack(int limita)
{
int switchline = 1;
int calitate = 0;
for(int i = 1; i <= limita; i++)
{
for(int k = 0 ; k <= lim ;k++)
{
calitate = dp[!switchline][k] + dp[switchline][k];
if(k - sirelemente[i] >= 0)
calitate += dp[!switchline][k-sirelemente[i]];
if(k + sirelemente[i] <= limita)
calitate += dp[!switchline][k + sirelemente[i]];
dp[switchline][k] = calitate%Modulo;
}
switchline = !switchline;
}
}
int main()
{
int n,m;
freopen("diamant.in","r",stdin);
freopen("diamant.out","w",stdout);
scanf("%d %d %d",&n,&m,&x);
greutate = (n * (n + 1) / 2) * (m * (m + 1 ) / 2);
if(x > greutate || x < -greutate)
{
printf("0\n");
return 0;
}
preparation(n,m);
backpack(n*m);
printf("%d\n",dp[(n*m)%2][x + (lim/2) - 1]);
return 0;
}