Cod sursa(job #3175139)

Utilizator juincPopescu Marian juinc Data 25 noiembrie 2023 12:50:55
Problema Zebughil Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
	
int vec[18], dp[1 << 17][18];

int main() {
    std::ifstream fin("zebughil.in");
    std::ofstream fout("zebughil.out");

    for (int cnt = 0; cnt < 3; ++cnt) {
        int n, g;
        fin >> n >> g;

        for (int i = 1; i <= n; ++i) 
            fin >> vec[i];

        for (int i = 1; i <= (1 << n) - 1; ++i) {
            dp[i][0] = -1;

            for (int j = 1; j <= n; ++j) {
                dp[i][j] = -1;

                for (int k = 1; k <= n; ++k) 
                    if ((i & 1 << k - 1) > 0 && dp[i - (1 << k - 1)][j - 1] != -1) 
                        dp[i][j] = std::max(dp[i][j], g - vec[k]);
                    else if ((i & 1 << k - 1) > 0 && dp[i - (1 << k - 1)][j] >= vec[i]) 
                        dp[i][j] = std::max(dp[i][j], dp[i - (1 << k - 1)][j] - vec[k]);
            }
        }

        int sol = -1;
        for (int i = 1; i <= n && sol == -1; ++i) 
            if (dp[(1 << n) - 1][i] != -1) 
                sol = i;

        fout << sol << "\n";
    }

    return 0;
}