Pagini recente » Cod sursa (job #2311872) | Cod sursa (job #1726) | Cod sursa (job #1715448) | Cod sursa (job #1035548) | Cod sursa (job #343480)
Cod sursa(job #343480)
#include <cstdio>
#include <cstring>
#define file_in "cowfood.in"
#define file_out "cowfood.out"
#define Nmax 25
#define Kmax 35
#define Smax 10005
#define Mod 3210121
int i,j,K,S,N,a[Nmax][Kmax];
int m[Nmax][Smax];
int f[Kmax],rez;
inline int maxim(int a, int b) { return a>b?a:b; }
void back(int k)
{
int faux[Kmax],j,smax=S;
if (k==N+1)
{
for (j=1;j<=K;++j)
smax-=f[i];
if (smax<0)
{
return ;
}
if (i%2==0)
{
rez+=m[K][smax];
if (rez>=Mod)
rez-=Mod;
}
else
{
rez-=m[K][smax];
if (rez<0)
rez+=Mod;
}
return ;
}
else
{
back(k+1);
i++;
memcpy(faux,f,sizeof(f));
for (j=1;j<=K;++j)
f[j]=maxim(f[j],a[k][j]);
back(k+1);
i--;
memcpy(f,faux,sizeof(f));
}
}
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d %d", &K,&S,&N);
for (i=1;i<=N;++i)
for (j=1;j<=K;++j)
scanf("%d", &a[i][j]);
for (i=0;i<=K;++i)
m[i][0]=1;
for (j=0;j<=S;++j)
m[0][j]=1;
for (i=1;i<=K;++i)
for (j=1;j<=S;++j)
{
m[i][j]=m[i-1][j]+m[i][j-1];
if (m[i][j]>=Mod)
m[i][j]-=Mod;
}
/* for (i=1;i<=K;++i)
{
for (j=1;j<=S;++j)
printf("%d ", m[i][j]);
printf("\n");
}*/
back(1);
rez-=(K*S-1);
rez=(rez+Mod)%Mod;
printf("%d", rez);
fclose(stdin);
fclose(stdout);
return 0;
}