Pagini recente » Cod sursa (job #1157952) | Cod sursa (job #1983172) | Cod sursa (job #2529121) | Cod sursa (job #715758) | Cod sursa (job #2707349)
#include <iostream>
#include <fstream>
#define MOD 3210121
#define NMAX 20000
using namespace std;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int k, s, n, a[50][50], C[NMAX+10][35], ans;
void precalc()
{ C[0][0] = 1;
for(int i=1; i<=NMAX; i++)
{ C[i][0] = 1;
for(int j=1; j<=30; j++)
C[i][j] = (C[i-1][j-1] + C[i-1][j]) % MOD;
}
}
int main()
{
fin >> k >> s >> n;
precalc();
for(int i=1; i<=n; i++)
for(int j=1; j<=k; j++)
fin >> a[i][j];
for(int mask=1; mask<(1<<n); mask++)
{ int cnt = 0, v[50] = {0};
for(int bit=0; bit<n; bit++)
if(mask & (1 << bit))
{ cnt++;
for(int j=1; j<=k; j++)
v[j] = max(v[j], a[bit+1][j]);
}
int sum = 0;
for(int i=1; i<=k; i++)
sum += v[i];
if(sum > s) continue;
if(cnt % 2 == 0)
ans = (ans - C[s-sum+k][k] + MOD) % MOD;
else
ans = (ans + C[s-sum+k][k]) % MOD;
}
fout << (C[s+k][k] - s * k - 1 - ans + MOD) % MOD << '\n';
return 0;
}