Pagini recente » Cod sursa (job #2116308) | Cod sursa (job #1413722) | Cod sursa (job #2046038) | Cod sursa (job #2906900) | Cod sursa (job #1851420)
#include <cstdio>
#include<algorithm>
#define MOD 3210121
using namespace std;
int a[21][31];
int comb[10001];
int N, S, K;
int v[21];
int best[21][31];
int rezf = 0;
void back()
{
int sum;
int k = 1;
v[k] = 0;
while(k > 0)
{
if(v[k] < N)
{
v[k]++;
sum = 0;
for(int i = 1; i <= K; i++)
{
best[k][i] = max(best[k - 1][i], a[v[k]][i]);
sum += best[k][i];
}
if(S - sum >= 0)
{
if(k % 2 == 1)
rezf = (rezf + comb[S - sum]) % MOD;
else
{
rezf = (rezf - comb[S - sum]) % MOD;
while(rezf < 0) rezf += MOD;
}
}
k++;
v[k] = v[k - 1];
}
else k--;
}
}
int main()
{
int i, j;
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
scanf("%d%d%d", &K, &S, &N);
for(i = 1; i <= N; i++)
{
for(j = 1; j <= K; j++)
{
scanf("%d", &a[i][j]);
}
}
for(i = 0; i <= S; i++)
comb[i] = 1;
for(i = 1; i <= K; i++)
{
for(j = 1; j <= S; j++)
{
comb[j] += comb[j - 1];
comb[j] %= MOD;
}
}
back();
int mv = (comb[S] - S * K - 1) % MOD;
while(mv < 0)mv += MOD;
rezf = (mv - rezf) % MOD;
while(rezf < 0) rezf += MOD;
printf("%d", rezf);
return 0;
}