Pagini recente » Cod sursa (job #1828944) | Cod sursa (job #831445) | Cod sursa (job #1736765) | Cod sursa (job #596650) | Cod sursa (job #1863584)
#include <cstdio>
#include<algorithm>
using namespace std;
const int MOD = 3210121;
int N, S, K;
int a[21][31], best[21][31];
int comb[10001];
int v[25];
int rezf = 0;
void back()
{
int k = 1;
v[k] = 0;
while(k > 0)
{
if(v[k] < N)
{
v[k]++;
int 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];
}
int dif = S - sum;
if(dif >= 0)
{
if(k % 2 != 0)
{
rezf += comb[dif];
rezf %= MOD;
}
else
{
rezf -= comb[dif];
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;
if(mv < 0)mv += MOD;
rezf = (mv - rezf) % MOD;
if(rezf < 0) rezf += MOD;
printf("%d", rezf);
fclose(stdout);
return 0;
}