Pagini recente » Cod sursa (job #2701214) | Cod sursa (job #880122) | Cod sursa (job #1610911) | Cod sursa (job #2728439) | Cod sursa (job #3145156)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define MOD 3210121
using namespace std;
int c[10101][31];
int maxs[21][31];
int sum[10101];
int a[21][31];
long long sol;
int n, k, s;
void init() {
for(int i = 0; i < 10101; i++) {
c[i][0] = 1;
for(int j = 1; j <= min(i, 30); j++)
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % MOD;
}
sum[0] = 1;
for(int 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(int i = 1; i <= k; i++)
s1 -= maxs[poz - 1][i];
if(s1 >= 0)
sol = (sol + MOD + sum[s1] * sign) % MOD;
} else {
for(int i = 1; i <= k; i++)
maxs[poz][i] = maxs[poz - 1][i];
bt(poz + 1, sign);
for(int 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);
scanf("%d%d%d", &k, &s, &n);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= k; j++)
scanf("%d", &a[i][j]);
init();
sol = (MOD * 2 - s * k - 1) % MOD;
bt(1, 1);
printf("%lld", sol);
return 0;
}