Cod sursa(job #3229040)

Utilizator AztecaVlad Tutunaru 2 Azteca Data 13 mai 2024 12:22:58
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 17;
const ll INF = 1e18;
ll dp[1 << N][N];

ll n, g, z[N];

void solve() {
    cin >> n >> g;
    for (int i = 0; i < n; ++i) {
        cin >> z[i];
    }
    for (int mask = 0; mask < (1 << n); ++mask) {
        for (int cnt = 0; cnt <= n; ++cnt) {
            dp[mask][cnt] = INF;
        }
    }
    dp[0][0] = 0;
    for (int mask = 1; mask < (1 << n); ++mask) {
        for (int cnt = 1; cnt <= n; ++cnt) {
            for (int b = 0; b < n; ++b) {
                if (mask & (1 << b)) {
                    if (dp[mask ^ (1 << b)][cnt] + z[b] <= g) {
                        dp[mask][cnt] = min(dp[mask][cnt], dp[mask ^ (1 << b)][cnt] + z[b]);
                    }
                    if (dp[mask ^ (1 << b)][cnt - 1] != INF) {
                        dp[mask][cnt] = min(dp[mask][cnt], z[b]);
                    }
                }
            }
        }
    }
    for (int cnt = 1; cnt <= n; ++cnt) {
        if (dp[(1 << n) - 1][cnt] != INF) {
            cout << cnt << '\n';
            return;
        }
    }
}

int main() {
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);
    int t = 3;
    while (t--) {
        solve();
    }
    return 0;
}