Pagini recente » Cod sursa (job #1601930) | Cod sursa (job #1742484) | Cod sursa (job #2466995) | Cod sursa (job #754538) | Cod sursa (job #839153)
Cod sursa(job #839153)
#include <stdio.h>
#define KMAX 32
#define NMAX 22
#define SMAX 10100
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
#define MOD 3210121
#define mod(a) (((a) >= MOD) ? ((a)-MOD):(a))
int A[SMAX][NMAX], S, N, K, Sol, IT, Sum[SMAX][NMAX];
int E[NMAX][KMAX], v[NMAX][KMAX];
void solve(int nv, int sgn, int num)
{
int i, j, sum;
for (i = nv; i <= N; i++)
{
sum = 0;
for (j = 1; j <= K; j++)
v[num+1][j] = MAX(v[num][j], E[i][j]), sum += v[num+1][j];
if (S-sum >= 0)
{
Sol = mod(Sol + Sum[S-sum][K] * sgn + MOD);
while (Sol >= MOD) Sol = mod(Sol);
}
IT++;
solve(i+1, -1*sgn, num+1);
}
}
int main()
{
int i, j, k;
freopen("cowfood.in", "r", stdin);
scanf("%d %d %d", &K, &S, &N);
A[0][0] = Sum[0][0] = 1;
for (i = 1; i <= S; i++)
Sum[i][0] = 1;
for (j = 1; j <= K; j++)
{
A[0][j] = Sum[0][j] = 1;
for (i = 1; i <= S; i++)
A[i][j] = Sum[i][j - 1],
Sum[i][j] = (Sum[i - 1][j] + A[i][j]) % MOD;
}
for (i = 1; i <= N; i++)
for (j = 1; j <= K; j++) scanf("%d", E[i]+j);
Sol = 0;
for (i = 2; i <= S; i++)
{
Sol = mod(Sol + A[i][K] - K + MOD);
while (Sol >= MOD) Sol = mod(Sol);
}
solve(1,-1,0);
freopen("cowfood.out", "w", stdout);
printf("%d\n", Sol);
return 0;
}