Cod sursa(job #3289542)

Utilizator Andercau_VasileAndercau Vasile Andercau_Vasile Data 27 martie 2025 13:01:53
Problema Zebughil Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;

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

#define NMAX 20

int z[NMAX];
int minim;
int part[NMAX];

int maxim(int k) {
    int m = 0;
    for (int i = 1; i <= k; ++i) {
        m = max(m, part[i]);
    }
    return m;
}

void verifica(int n, int g) {
    int m = maxim(n);
    bool corect = 1;
    for (int i = 1; i <= m; ++i) {
        int sum = 0;
        for (int j = 1; j <= n; ++j) {
            if (part[j] == i) {
                sum += z[j];
            }
        }
        if (sum > g) {
            corect = 0;
        }
    }
    if (corect) {
        minim = min(minim, m);
    }
}

void back(int k, int n, int g) {
    int m = maxim(k - 1);
    for (int i = 1; i <= m + 1; ++i) {
        part[k] = i;

        if (k == n) {
            verifica(n, g);
        } else {
            back(k + 1, n, g);
        }
    }
}

int main() {
    int t = 3;
    while (t--) {
        int n, g;
        fin >> n >> g;
        for (int i = 1; i <= n; ++i) {
            fin >> z[i];
        }

        minim = n;
        back(1, n, g);

        fout << minim << '\n';
    }
    return 0;
}