Cod sursa(job #1408985)

Utilizator retrogradLucian Bicsi retrograd Data 30 martie 2015 12:49:04
Problema Zebughil Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream>
#include<vector>
#include<iostream>

using namespace std;
typedef int var;

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

var G, N;
var W[20];

bool knapsack(string conf) {
    var totalw = 0;
    //cout << "Apel knapsack : " << conf << '\n';
    for(var i=0; i<conf.size(); i++) {
        char c = conf[i];
        totalw += W[c - '0'];
    }
    return totalw <= G;
}


bool solve(var n, string conf) {
    var no_obj = conf.size();

    //cout << conf << '\n';

    if(n == 1) {
        return knapsack(conf);
    }



    for(var c = 1; c < (1 << no_obj); c++) {

        string str1, str2;

        for(var i=0; i<no_obj; i++) {
            if(c & (1 << i)) {
                str1 += conf[i];
            } else {
                str2 += conf[i];
            }
        }
        bool r1 = solve(n / 2, str1);
        bool r2 = solve(n - (n / 2), str2);

        if(r1 & r2)
            return 1;
    }

    return 0;
}


int main() {

    for(var t=1; t<=3; t++) {
        fin>>N>>G;
        for(var i=1; i<=N; i++) {
            fin>>W[i];
        }

        string full;
        for(var i=1; i<=N; i++) {
            full += (i + '0');
        }

        //cout << full << '\n';

        var rez;
        for(rez=1; !solve(rez, full); rez++);
        fout<<rez<<'\n';

    }

    return 0;
}