Cod sursa(job #2488772)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 7 noiembrie 2019 16:54:27
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int Nmax = 20;
int v[Nmax];
int n, G;
int dp[1 << Nmax];

int solve(){

    ll sum;
    memset(dp,0,sizeof(dp));

    for(int i, substep, step = 0; step < (1 << n); ++step){

        sum = 0;
        for(i = 1; i <= n; ++i)
            if(step & (1 << (i - 1)))
                sum += v[i];
        if(sum <= 1LL * G)
            dp[step] = 1;
        else{

            dp[step] = INT_MAX;
            for(substep = (step - 1) & step; substep; substep = ((substep - 1) & step))
                dp[step] = min(dp[step], dp[substep] + dp[step - substep]);
        }
    }

    return dp[(1 << n) - 1];
}

int main(){

    ifstream cin("zebughil.in");
    ofstream cout("zebughil.out");

    for(int t = 1; t <= 3; ++t){

        cin >> n >> G;
        for(int i = 1; i <= n; ++i)
            cin >> v[i];
        cout << solve() << '\n';
    }

    return 0;
}