Pagini recente » Cod sursa (job #655508) | Cod sursa (job #530636) | Cod sursa (job #2915010) | Cod sursa (job #357334) | Cod sursa (job #3276808)
#include <fstream>
using namespace std;
const int MOD = 3210121, NMAX = 21,
KMAX = 31, SMAX = 10001;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int kk, s, n, v, e, m[NMAX][KMAX],
x[NMAX], maxi[NMAX][KMAX], scomb[SMAX];
void genSComb()
{
for(int i = 0; i <= s; ++i) scomb[i] = 1;
for(int i = 1; i <= kk; ++i)
for(int j = 1; j <= s; ++j) scomb[j] = (scomb[j] + scomb[j - 1]) % MOD;
}
void bt(int k)
{
for(int i = x[k - 1] + 1; i <= n; ++i)
{
int sum = 0;
for(int j = 1; j <= kk; ++j)
{
maxi[k][j] = max(maxi[k - 1][j], m[i][j]);
sum += maxi[k][j];
}
if(sum <= s)
{
if(k & 1)
{
e += scomb[s - sum];
if(e > MOD) e -= MOD;
}
else
{
e -= scomb[s - sum];
if(e < 0) e += MOD;
}
x[k] = i, bt(k + 1);
}
}
}
int main()
{
fin >> kk >> s >> n;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= kk; ++j) fin >> m[i][j];
genSComb();
bt(1);
v = (scomb[s] - s * kk - 1 - e) % MOD;
if(v < 0) v += MOD;
fout << v;
return 0;
}