Cod sursa(job #2988256)

Utilizator DooMeDCristian Alexutan DooMeD Data 3 martie 2023 21:19:09
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int nmax = 17;
const int inf = 2e9 + 5;

ifstream f("zebughil.in");
ofstream g("zebughil.out");

pair<int, int> dp[(1<<nmax)];

void solve() {
    int n, G; f >> n >> G;
    vector<int> v(n);
    for(int i=0; i<n; i++) f >> v[i];
    for(int i=0; i<(1<<n); i++)
        dp[i] = {inf, inf};
    dp[0] = {1, 0};
    // first - cnt camioane
    // second - greutate minima in ultimul camion
    for(int mask=0; mask<(1<<n); mask++) {
        for(int i=0; i<n; i++) {
            if((mask &(1<<i))) continue;

            int new_mask = mask + (1<<i);
            ll w = dp[mask].second + v[i];
            pair<int, int> new_val;
            if(w > G) new_val = {dp[mask].first+1, v[i]};
            else new_val = {dp[mask].first, w};
            dp[new_mask] = min(dp[new_mask], new_val);
        }
    }
    g << dp[(1<<n)-1].first << "\n";
}

int main() {
    for(int i=1; i<=3; i++) solve();
    return 0;
}