Pagini recente » Cod sursa (job #1610579) | Cod sursa (job #1720490) | Cod sursa (job #538246) | Cod sursa (job #882231) | Cod sursa (job #2335220)
#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) { ///pinex
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) ///combinari :(
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) ; ///doamne binecuvanteaza aceasta formula sa nu dea erori si sa functioneze si sa iau 100
return 0 ; }
/*!
11 0000000 0000000 ppppppp u u n n ccccc tttttttttt eeeeeeeeee
1 1 0 0 0 0 p p u u n n n c t e
1 1 0 0 0 0 p p u u n n n c t e
1 1 0 0 0 0 ppppppp u u n n n c t eeeeee
1 0 0 0 0 p u u n n n c t e
1 0 0 0 0 p u u n n n c t e
1 0 0 0 0 p u u n n n c t e
1 0000000 0000000 p uuuuuuu n n cccccc t eeeeeeeeee
{1}
*/