0-1背包问题
#include<iostream>
using namespace std;
int c, n, *w, *v, *x;
int sw = 0, cv = 0, bestv = 0;
void backtrack(int k) {
int i;
if (k > n) {
if (cv > bestv) {
bestv = cv;
}
return;
}
else
{
for (i = 0; i <= n; i++)
{
x[k] = i;
if (i == 0)
backtrack(k + 1);
else
if (sw + w[k] <= c)
{
sw += w[k];
cv += v[k];
backtrack(k + 1);
sw -= w[k];
cv -= v[k];
}
}
}
}
int main() {
int i;
cin >> n;
cin >> c;
w = new int[n + 1];
v = new int[n + 1];
x = new int[n + 1];
for (i = 1; i <= n; i++)
{
cin >> w[i] >> v[i];
}
backtrack(1);
cout << bestv;
return 0;
}
运行结果