Cod sursa(job #2242504)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 18 septembrie 2018 20:00:36
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("zebughil.in");
ofstream out("zebughil.out");

const int NMAX = 17;

int dp[1 << NMAX + 1][NMAX + 1], v[NMAX];

int main() {
    for(int test = 1; test <= 3; test ++) {
        int n, g;
        in >> n >> g;
        for(int i = 0; i < n; i ++)
            in >> v[i];

        for(int mask = 1; mask < (1 << n); mask ++) {
            for(int i = 0; i <= n; i ++)
                dp[mask][i] = g + 1;
            for(int i = 0; i < n; i ++)
                if(mask & (1 << i)) {
                    for(int j = 1; j <= n; j ++) {
                        if(dp[mask ^ (1 << i)][j] + v[i] <= g)
                            dp[mask][j] = min(dp[mask][j], dp[mask ^ (1 << i)][j] + v[i]);
                        if(dp[mask ^ (1 << i)][j - 1] <= g)
                            dp[mask][j] = min(dp[mask][j], v[i]);
                    }
                }
        }

        int i = 1;
        while(dp[(1 << n) - 1][i] > g)
            i ++;
        out << i << "\n";
    }


    return 0;
}