Cod sursa(job #3253647)

Utilizator AlexPlesescuAlexPlesescu AlexPlesescu Data 3 noiembrie 2024 23:07:19
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <vector>

using namespace std;
#define pb push_back
#define sz(x) (int)(x.size())
#define all(a) a.begin(), a.end()
#define nl '\n'
const int N = 20 , INF = 1e9, mod = 998244353;

int n, g, w[N];
pair<int, int> best[(1 << N)];

int main() {
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);
    int T = 3;
    while (T--) {
        cin >> n >> g;
        for (int i = 0; i < n; i++) {
            cin >> w[i];
        }
        for (int i = 0; i < (1 << n); i++) {
            best[i].first = best[i].second = INF;
        }
        for (int i = 0; i < n; i++) {
            if (w[i] <= g) {
                best[(1 << i)].first = 1;
                best[(1 << i)].second = w[i];
            }
        }
        for (int mask = 1; mask < (1 << n); mask++) {
            for (int p = 0; p < n; p++) {
                if (mask & (1 << p)) {
                    auto option = best[mask ^ (1 << p)];
                    if (option.second + w[p] <= g) {
                        option.second += w[p];
                    }
                    else {
                        option.first++;
                        option.second = w[p];
                    }
                    best[mask] = min(best[mask], option);
                }
            }
        }
        cout << best[(1 << n) - 1].first << '\n';
    }
}