Cod sursa(job #2157411)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 9 martie 2018 16:46:28
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

pair <long long, long long> dp[1 << 18];
long long v[20];

void test()
{
    int n, g;

    cin >> n >> g;

    for (int i(0); i < n; i++)
        cin >> v[i];

    for (int i(1); i < (1 << n); i++)
        dp[i] = { 1e9, 1ll << 60 };

    for (int i(0); i < (1 << n); i++) {
        for (int bit(0); bit < n; bit++) {
            if (i & (1 << bit))
                continue;

            pair <long long, long long> nou = { dp[i].first, dp[i].second + v[bit] };

            if (1ll * dp[i].second + v[bit] > g)
                nou = { dp[i].first + 1, v[bit] };

            dp[i + (1 << bit)] = min(dp[i + (1 << bit)], nou);
        }
    }

    if (dp[(1 << n) - 1].second)
        dp[(1 << n) - 1].first++;
    cout << dp[(1 << n) - 1].first << '\n';
}

int main()
{
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);

    test(); test(); test();
    return 0;
}