Cod sursa(job #2669476)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 7 noiembrie 2020 07:42:30
Problema Zebughil Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 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];

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