Cod sursa(job #2718482)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 8 martie 2021 19:28:14
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

#define MOD 3210121

using namespace std;

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

int C[12000][40], k, s, n, mat[35][35], rez, stiva[105], maxx[50][50];

void bkt(int pas)
{
    if(pas > 0)
    {
        int sum = 0;
        for(int i = 1; i <= k; ++i)
        {
            maxx[pas][i] = max(maxx[pas - 1][i], mat[stiva[pas]][i]);
            sum += maxx[pas][i];
        }

        if(sum <= s){
            if(pas % 2 == 0)
                rez = (rez - C[s - sum + k][k] + MOD) % MOD;
            else rez = (rez + C[s - sum + k][k]) % MOD;
        }

        if(pas == n)
            return;
    }
    for(int i = stiva[pas] + 1; i <= n; ++i)
    {
        stiva[pas + 1] = i;
        bkt(pas + 1);
    }
}

int main()
{
    C[0][0] = 1;
    for(int i = 1; i < 12000; ++i)
    {
        C[i][0] = 1;
        for(int j = 1; j <= 35; ++j)
            C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
    }

    fin >> k >> s >> n;

    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= k; ++j)
            fin >> mat[i][j];

    bkt(0);

    fout << (C[s + k][k] - s * k - 1 - rez + MOD) % MOD << '\n';
    return 0;
}