Cod sursa(job #2861673)

Utilizator rares89_Dumitriu Rares rares89_ Data 4 martie 2022 11:30:27
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>
#define MOD 3210121

using namespace std;

ifstream fin("cowfood.in");
ofstream fout("cowfood.out");

int k, s, n, m, v[25][35], x[25], maxi[25][35], comb[10005], ans;

void back(int pas) {
    for(int i = x[pas - 1] + 1; i <= n; i++) {
        int sum = 0;
        for(int j = 1; j <= k; j++) {
            maxi[pas][j] = max(maxi[pas - 1][j], v[i][j]);
            sum += maxi[pas][j];
        }   
        if(sum <= s) {
            if(pas % 2 == 0) {
                m -= comb[s - sum];
                if(m < 0) {
                    m += MOD;
                }
            } else {
                m += comb[s - sum];
                if(m >= MOD) {
                    m -= MOD;
                }
            }
            x[pas] = i;
            back(pas + 1);
        }
    }
}

int main() {
    fin >> k >> s >> n;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= k; j++) {
            fin >> v[i][j];
        }
    }
    fin.close();
    for(int i = 0; i <= s; i++) {
        comb[i] = 1;
    }
    for(int i = 1; i <= k; i++) {
        for(int j = 1; j <= s; j++) {
            comb[j] += comb[j - 1];
            comb[j] %= MOD;
        }
    }
    back(1);
    int ans = comb[s] - s * k - 1 - m;
    ans %= MOD;
    if(ans < 0) {
        ans += MOD;
    }
    fout << ans;
    return 0;
}