Uputstvo
Proveri sve maske od 0 do 2n − 1: izračunaj težinu i vrednost podskupa i zapamti najbolju vrednost među onima koje staju. (Za veće n koristi se DP – problem ranca.)
Rešenje (C++)
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
long long W;
cin >> n >> W;
vector<long long> t(n), v(n);
for (int i = 0; i < n; i++) cin >> t[i] >> v[i];
long long naj = 0;
for (int m = 0; m < (1 << n); m++) {
long long tez = 0, vr = 0;
for (int i = 0; i < n; i++)
if ((m >> i) & 1) { tez += t[i]; vr += v[i]; }
if (tez <= W && vr > naj) naj = vr;
}
cout << naj << endl;
return 0;
}