Pagini recente » Cod sursa (job #571873) | Cod sursa (job #1840468) | Cod sursa (job #1970189) | Cod sursa (job #1550153) | Cod sursa (job #847464)
Cod sursa(job #847464)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define Modulo 3210121
int N, K, S;
int Dp[35][10010], A[25][35], V[35];
int Ans, i, j, Conf;
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
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++) Dp[0][i] = 1;
for(i = 1; i <= K; i++)
for(j = 0; j <= S; j++)
Dp[i][j] = (Dp[i - 1][j] + Dp[i][j - 1]) % Modulo;
Ans = (Modulo - S * K - 1) % Modulo;
for(Conf = 0; Conf < (1 << N); Conf ++)
{
memset(V, 0, sizeof(V));
int Sign = 1, CrtSum = S;
for(i = 0; i < N; i++)
if(Conf & (1 << i))
{
for(j = 0; j < K; j++)
if(A[i][j] > V[j])
CrtSum = CrtSum + V[j] - A[i][j], V[j] = A[i][j];
Sign *= (-1);
}
if(CrtSum >= 0) Ans = (Ans + Sign * Dp[K][CrtSum] + Modulo) % Modulo;
}
printf("%i\n", Ans % Modulo);
return 0;
}