Cod sursa(job #3242873)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 14 septembrie 2024 13:27:05
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n, gmax;

int main()
{
    while(fin >> n >> gmax) {
        int v[n + 2];
        vector<pair<int, int>> dp((1 << n) + 2); ///tine minte nr minim de camioane + gradul de umplere al ultimului camion
        for(int i=0; i<n; i++) fin >> v[i];
        dp[0].first = 1;
        for(int i=1; i < (1 << n); i++) dp[i].first = n + 1;
        for(int mask=0; mask < (1 << n); mask++) {
            for(int i=0; i<n; i++) {
                if(!(mask & (1 << i))) {
                    if(dp[mask].second + v[i] <= gmax) dp[mask ^ (1 << i)] = min(dp[mask ^ (1 << i)], {dp[mask].first, dp[mask].second + v[i]});
                    else dp[mask ^ (1 << i)] = min(dp[mask ^ (1 << i)], {dp[mask].first + 1, v[i]});
                }
            }
        }
        fout << dp[(1 << n) - 1].first << '\n';
    }

    return 0;
}