Pagini recente » Cod sursa (job #620285) | Cod sursa (job #2114779) | Cod sursa (job #2385038) | Cod sursa (job #2363551) | Cod sursa (job #935444)
Cod sursa(job #935444)
# include <stdio.h>
# include <cstring>
using namespace std;
# define input "cowfood.in"
# define output "cowfood.out"
# define maxk 32
# define maxn 22
# define maxs 10004
# define maxim(a,b) (a>b?a:b)
int a[maxn][maxk],t[maxk][maxs];
int i, j, n, k, s;
int v[31], nr, ret;
# define mod 3210121
void back(int K)
{
if ( K == n + 1)
{
int e = s;
for(i = 1; i<=k;i++)
e-=v[i];
if(e < 0) return;
if(!(nr&1))
{
ret+=t[k][e];
if(ret >= mod) ret-=mod;
}
else
{
ret-=t[k][e];
if(ret < 0) ret += mod;
}
}
else
{
back(K+1);
nr++;
int v1[31];
for(i = 1; i <= k; i++)
v1[i] = v[i],v[i] = maxim(v[i],a[K][i]);
back(K+1);
memcpy(v,v1,sizeof(v1));
nr--;
}
}
int main()
{
freopen(input, "r", stdin);
freopen(output, "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 = 1; i <= s; i++)
t[0][i] = 1;
for(i = 1;i <= k; i++)
t[i][0] =1;
for(i = 1; i <= k; i++)
for(j = 1; j <= s; j++)
t[i][j] = (t[i-1][j] + t[i][j-1])%mod;
back(1);
ret-=k*s+1;
if(ret < 0) ret+=mod;
printf("%d",ret);
return 0;
}