Cod sursa(job #2335220)

Utilizator NOSCOPEPROKENDYMACHEAMACUMVREAU NOSCOPEPROKENDY Data 3 februarie 2019 19:21:20
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.3 kb
#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}

*/