Pagini recente » Cod sursa (job #2624164) | Cod sursa (job #3129735) | Cod sursa (job #2572108) | Cod sursa (job #2873165) | Cod sursa (job #911867)
Cod sursa(job #911867)
#include<stdio.h>
#define nmax 23
#define kmax 33
#define smax 10005
#define modulo 3210121
long k, s, n, nt, ng, i, j, sum, amax, nels;
long a[nmax][kmax], p[smax][kmax], sol[kmax], m[smax];
void citire()
{
scanf("%ld %ld %ld",&k,&s,&n);
for (i=1;i<=n;i++)
for (j=1;j<=k;j++)
scanf("%ld",&a[i][j]);
}
void precalculare()
{
for (j=1;j<=k;j++)
p[0][j]=1;
for (i=1;i<=s;i++)
{
// p[i][0]=1;
for (j=1;j<=k;j++)
p[i][j]=(p[i-1][j]+p[i][j-1])%modulo;
}
m[0]=1;
for (i=1;i<=s;i++)
m[i]=(m[i-1]+p[i][k])%modulo;
}
void calculare()
{
sum=s;
for (i=1;i<=k;i++)
{
amax=0;
for(j=1;j<=nels;j++)
if (amax<a[sol[j]][i])
amax=a[sol[j]][i];
sum-=amax;
}
if (nels%2==1)
ng=(ng+m[sum])%modulo;
else
ng=(ng-m[sum]+modulo)%modulo;
}
void gen(long poz)
{
long x;
if (poz>1)
{ nels=poz-1; calculare(); }
for (x=sol[poz-1]+1;x<=n;x++)
{ sol[poz]=x; gen(poz+1); }
}
int main()
{
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
citire();
precalculare();
gen(1);
nt=(m[s]-k*s-1+modulo)%modulo;
printf("%ld",(nt-ng+modulo)%modulo);
return 0;
}