Pagini recente » Cod sursa (job #1560314) | Cod sursa (job #1627787) | Cod sursa (job #903735) | Cod sursa (job #2554216) | Cod sursa (job #793728)
Cod sursa(job #793728)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define nmax 25
#define kmax 35
#define smax 10010
#define modulo 3210121
int N, K, S, M[kmax][smax], A[nmax][kmax], ans;
void Back(int P, int sign, int V[])
{
if(P == N)
{
int crtSum = S;
for(int i = 0; i < K; i++) crtSum -= V[i];
if(crtSum >= 0) ans = (ans + sign * M[K][crtSum] + modulo) % modulo;
return ;
}
Back(P + 1, sign, V);
int V2[kmax];
for(int i = 0; i < K; i++) V2[i] = max(V[i], A[P][i]);
Back(P + 1, -sign, V2);
}
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
int i, j;
scanf("%i %i %i", &K, &S, &N);
for(i = 0; i < N; i++)
for(j = 0; j < K; j++)
scanf("%i", &A[i][j]);
for(i = 0; i <= S; i++)
M[0][i] = 1;
for(i = 1; i <= K; i++)
for(j = 0; j <= S; j++)
{
M[i][j] = M[i - 1][j];
if(j) M[i][j] = (M[i][j] + M[i][j - 1]) % modulo;
}
ans = (modulo - S * K - 1) % modulo;
int V[kmax];
memset(V, 0, sizeof(V));
Back(0, 1, V);
printf("%i\n", ans);
return 0;
}