Pagini recente » Cod sursa (job #2551117) | Cod sursa (job #1989125) | Cod sursa (job #1800149) | Cod sursa (job #2658600) | Cod sursa (job #1408999)
#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 = 1;
if(solve(1, full)) {
fout<<1<<'\n';
} else {
for(var i = 8; i; i /= 2) {
if(rez + i <= N && !solve(rez+i, full))
rez += i;
}
fout<<rez+1<<'\n';
}
}
return 0;
}