Cod sursa(job #2157400)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 9 martie 2018 16:42:22
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 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, 1ll * dp[i].second + v[bit] - g };

            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;
}