Cod sursa(job #2327442)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 24 ianuarie 2019 18:26:08
Problema Cowfood Scor 28
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 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)
      return ;
    int M = dp[k][s - S] ;
    if (bit & 1) ///doamne te rog asigura-te acest if sa nu dea erori
      M = M * -1 ;
    sol = (sol + M + MOD) % MOD ; }
  else {
    Back(x + 1, bit) ;
    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

*/