Cod sursa(job #3326483)

Utilizator Mateixx1Trandafir Matei Mateixx1 Data 29 noiembrie 2025 10:02:25
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
const int MOD=3210121,
          NMAX=21,
          KMAX=31,
          SMAX=10001;

int K,S,N,V,E;
int M[NMAX][KMAX],x[NMAX],MAX[NMAX][KMAX],SCOMB[SMAX];

void calcSumComb() {
    for(int i=0; i<=S; i++) {
        SCOMB[i]=1;
    }
    for(int i=1; i<=K; i++) {
        for(int j=1; j<=S; j++) {
            SCOMB[j]+=SCOMB[j-1];
            SCOMB[j]%=MOD;
        }
    }
}

void bt(int k) {
    for(int i=x[k-1]+1; i<=N; i++) {
        int sum=0;
        for(int j=1; j<=K; j++) {
            MAX[k][j]=max(MAX[k-1][j],M[i][j]);
            sum+=MAX[k][j];
        }
        if(sum<=S) {
            if(k%2!=0) {
                E+=SCOMB[S-sum];
                if(E>=MOD) {
                    E-=MOD;
                }
            } else {
                E-=SCOMB[S-sum];
                if(E<0) {
                    E+=MOD;
                }
            }
            x[k]=i;
            bt(k+1);
        }
    }
}

int main() {
    f>>K>>S>>N;
    for(int i=1; i<=N; i++) {
        for(int j=1; j<=K; j++) {
            f>>M[i][j];
        }
    }
    calcSumComb();
    bt(1);
    V=SCOMB[S]-S*K-1-E;
    V%=MOD;
    if(V<0) {
        V+=MOD;
    }
    g<<V;
    f.close();
    g.close();
    return 0;
}