Pagini recente » Cod sursa (job #2058728) | Cod sursa (job #865881) | Cod sursa (job #236948) | Cod sursa (job #1602885) | Cod sursa (job #2707366)
#include <iostream>
#include <fstream>
#define MOD 3210121
#define NMAX 10100
using namespace std;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int k, s, n, sum, v[50], a[50][50], C[NMAX+10][35], aux[50], 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;
}
}
void bkt(int p)
{ if(p)
{ for(int i=1; i<=k; i++)
v[i] = 0;
sum = 0;
for(int i=1; i<=p; i++)
for(int j=1; j<=k; j++)
v[j] = max(v[j], a[aux[i]][j]);
for(int i=1; i<=k; i++)
sum += v[i];
if(s >= sum)
{ if(p % 2 == 0)
ans = (ans - C[s-sum+k][k] + MOD) % MOD;
else
ans = (ans + C[s-sum+k][k]) % MOD;
}
if(p == n)
return;
}
for(int i=aux[p]+1; i<=n; i++)
{ aux[p+1] = i;
bkt(p+1);
}
}
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];
bkt(0);
fout << (C[s+k][k] - s * k - 1 - ans + MOD) % MOD << '\n';
return 0;
}