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