Pagini recente » Cod sursa (job #2571867) | Cod sursa (job #2103632) | Cod sursa (job #2686930) | Cod sursa (job #1585385) | Cod sursa (job #2695893)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("diamant.in");
ofstream out("diamant.out");
int dp[100001], dp2[100001];
int main()
{
int n, m, x;
in>>n>>m>>x;
int sum=0, min1, min2, max1, max2;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
sum+=i*j;
if(sum<x || sum<-x)
{
out<<0;
return 0;
}
min1=max1=min2=max2=sum;
dp[sum]=1;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
for(int k = max2; k>=min2; k--)
if(dp[k]!=0)
{
dp2[k+i*j] +=dp[k];
max1=max(max1, k+ i*j);
dp2[k-i*j] +=dp[k];
min1=min(min1, k- i*j);
}
for(int k=min1; k<=max1; k++)
{
dp[k] +=dp2[k];
dp2[k]=0;
dp[k] %=10000;
}
min2=min1;
max2=max1;
}
}
out<<dp[sum+x];
return 0;
}