Pagini recente » Cod sursa (job #1204846) | Cod sursa (job #1040096) | Cod sursa (job #2132938) | Cod sursa (job #1946235) | Cod sursa (job #1834919)
#include <bits/stdc++.h>
#define maxN 23
#define maxK 33
#define maxS 10002
#define MOD 3210121
using namespace std;
int n,k,s,i,j,sol,maxx[maxN];
int a[maxN][maxK],b[maxN][maxK];
int dp[maxN][maxS];
void bkt(int p,int _sign)
{
if(p==n+1)
{
int sum=0;
for(int i=1;i<=k;i++)
sum+=maxx[i];
if(sum<=s)
sol=(sol+MOD+_sign*dp[k][s-sum])%MOD;
return;
}
bkt(p+1,_sign);
for(int i=1;i<=k;i++)
b[p][i]=maxx[i],
maxx[i]=max(maxx[i],a[p][i]);
bkt(p+1,-_sign);
for(int i=1;i<=k;i++)
maxx[i]=b[p][i];
}
int main()
{
freopen("cowfood.in","r",stdin);
freopen("cowfood.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<=s;i++)
dp[0][i]=1;
for(i=1;i<=k;i++)
{
dp[i][0]=1;
for(j=1;j<=s;j++)
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
while(dp[i][j]>=MOD)
dp[i][j]-=MOD;
}
}
bkt(1,1);
sol=(sol-s*k-1+MOD)%MOD;
printf("%d",sol);
return 0;
}