Pagini recente » Cod sursa (job #2441222) | Cod sursa (job #2827453) | Cod sursa (job #1329240) | Cod sursa (job #517287) | Cod sursa (job #3289383)
#include <fstream>
using namespace std;
const int MOD = 3210121,
NMAX = 21,
KMAX = 31,
SMAX = 10001;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int K, S, N, V, E;
int M[NMAX][KMAX],x[NMAX], MAX[NMAX][KMAX], SCOMB[SMAX];
void calcSumComb()
{
for(int i = 0; i <= S; ++i)
SCOMB[i] = 1;
for(int i = 1; i <= K; ++i)
for(int j = 1; j <= S; ++j)
{
SCOMB[j]+=SCOMB[j-1];
SCOMB[j]%=MOD;
}
}
void bt(int k)
{
for(int i = x[k - 1] + 1; i <= N; ++i)
{
int sum = 0;
for(int j = 1; j <= K; ++j)
{
MAX[k][j] = max(MAX[k - 1][j], M[i][j]);
sum += MAX[k][j];
}
if(sum <= S)
{
if(k%2!=0)
{
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()
{
f>>K>>S>>N;
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= K; ++j)
f>> M[i][j];
calcSumComb();
bt(1);
V = (SCOMB[S] - S * K - 1 - E) % MOD;
if(V < 0) V += MOD;
g << V;
f.close();
g.close();
return 0;
}