Pagini recente » Cod sursa (job #3197002) | Cod sursa (job #1350949) | Cod sursa (job #30844) | Cod sursa (job #1352271) | Cod sursa (job #1016249)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MOD 3210121
using namespace std;
int c[10101][31], a[21][31], maxs[21][31], sum[10101];
int n, k, s;
long long sol;
void init()
{
int i, j;
for(i=0;i<10101;i++)
{
c[i][0]=1;
for(j=1;j<=min(i, 30);j++)
{
c[i][j]=(c[i-1][j-1]+c[i-1][j])%MOD;
}
}
sum[0]=1;
for(i=1;i<=s;i++)
{
sum[i]=(c[i+k-1][k-1]+sum[i-1])%MOD;
}
}
void bt(int poz, int sign)
{
int i;
if(poz==n+1)
{
int s1=s;
for(i=1;i<=k;i++)
{
s1-=maxs[poz-1][i];
}
if(s1>=0) sol=(sol+MOD+sum[s1]*sign)%MOD;
}
else
{
for(i=1;i<=k;i++) maxs[poz][i]=maxs[poz-1][i];
bt(poz+1, sign);
for(i=1;i<=k;i++) maxs[poz][i]=max(maxs[poz-1][i], a[poz][i]);
bt(poz+1, -sign);
}
}
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
int i, j;
scanf("%d%d%d", &k, &s, &n);
for(i=1;i<=n;i++)
{
for(j=1;j<=k;j++)
{
scanf("%d", &a[i][j]);
}
}
init();
sol=(MOD*2-s*k-1)%MOD;
bt(1, 1);
printf("%lld", sol);
}