Pagini recente » Cod sursa (job #2298702) | Cod sursa (job #3221852) | Cod sursa (job #1462745) | Cod sursa (job #1315495) | Cod sursa (job #2338885)
#include <bits/stdc++.h>
#define MOD 3210121
int n, k, s, sol, V[32], A[32], dp[32][1 << 14], v[22][32] ;
void Back(int x, int bit)
{
int i ;
if (x == n + 1)
{
int S(0) ;
for (i = 1 ; i <= k ; ++ i)
S += V[i] ;
if(S <= s)
{
int M = dp[k][s - S] ;
if(bit & 1)
M = -M ;
sol = (sol + M + MOD) % MOD ;
}
}
else
{
Back(x + 1, bit) ;
int A[k + 1] ;
for (i = 1 ; i <= k ; ++ i)
A[i] = V[i], V[i] = std::max(V[i], v[x][i]) ;
Back(x + 1, bit + 1) ;
for (i = 1 ; i <= k ; ++ i)
V[i] = A[i] ;
}
}
int main()
{
freopen("cowfood.in", "r", stdin) ;
freopen("cowfood.out", "w", stdout) ;
int i, j ;
scanf("%d %d %d", &k, &s, &n) ;
for (i = 1 ; i <= n ; ++ i)
for (j = 1 ; j <= k ; ++ j)
scanf("%d", &v[i][j]) ;
for (i = 0 ; i <= s ; ++ i)
dp[0][i] = 1;
for (i = 1 ; i <= k ; ++ i)
for (j = dp[i][0] = 1 ; j <= s ; ++ j)
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % MOD ;
Back(1, 0) ;
printf("%d", (sol - 1 - s * k + MOD) % MOD) ;
}