Pagini recente » Cod sursa (job #1753415) | Cod sursa (job #1243542) | Cod sursa (job #612449) | Cod sursa (job #2386378) | Cod sursa (job #1209704)
#include<fstream>
using namespace std;
typedef struct { int val, nr; } tip;
tip a[200];
int i,j,n,m,k,s,v[405],dp[2][100000],nr,zero=50000,indc=1,indp,comb[10][10];
int main(void) {
ifstream fin("diamant.in");
ofstream fout("diamant.out");
fin>>n>>m>>k;
if (k<0) k*=-1;
comb[0][0]=1;
for (i=1; i<10; ++i){
comb[i][0]=1;
for (j=1; j<=i; ++j) comb[i][j]=comb[i-1][j]+comb[i-1][j-1];
}
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j){
s+=i*j;
++v[i*j];
}
if (k>s) { fout<<"0"; return 0; }
for (i=1; i<=n*m; ++i)
if (v[i]>0) { ++nr; a[nr].val=i; a[nr].nr=v[i]; }
dp[0][zero]=1; dp[0][zero-1]=1; dp[0][zero+1]=1;
for (i=2; i<=nr; ++i) {
for (j=zero-s; j<=zero+s; ++j){
int i1,j1;
for (i1=0; i1<=a[i].nr; ++i1)
for (j1=0; j1<=i1; ++j1){
dp[indc][j]+=dp[indp][j-(i1-2*j1)*a[i].val]*comb[a[i].nr][i1];
dp[indc][j]%=10000;
}
}
swap(indc,indp);
}
fout<<dp[indp][zero+k];
return 0;
}