Cod sursa(job #3174803)

Utilizator panterasbook29Turcu Stiolica Alexandru panterasbook29 Data 25 noiembrie 2023 10:16:47
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

const int inf = 1e9;
int n, g, v[20], pt[20], dp[(1 << 17) + 5][2];

int main(){
    for (int tt = 1; tt <= 3; ++tt){
        fin >> n >> g;
        int p = (1 << n) - 1;
        for (int i = 1; i <= p; ++i) dp[i][0] = inf;
        dp[0][0] = 0;
        pt[0] = 1;
        for (int i = 1; i <= n; ++i){
            fin >> v[i];
            pt[i] = pt[i - 1] * 2;
        }
        int ans = n;
        int t = 1;
        for (int j = 1; j <= n; ++j){
            dp[0][t] = inf;
            for (int i = 1; i <= p; ++i){
                dp[i][t] = inf;
                for (int k = 0; k < n; ++k){
                    if (i & (1 << k)){
                        if (dp[i - pt[k]][t] + v[k + 1] <= g)
                            dp[i][t] = min(dp[i][t], dp[i - pt[k]][t] + v[k + 1]);
                        if (dp[i - pt[k]][1 - t] <= g)
                            dp[i][t] = min(dp[i][t], v[k + 1]);
                    }
                }
            }
            if (dp[p][t] <= g){
                fout << j << "\n";
                break;
            }
            t = 1 - t;
        }
    }
    return 0;
}