给定n种物品和一背包。物品i的重量是wi>0,其价值为vi>0,背包的容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?
(本代码没有剪枝函数)
#include<iostream>
#include<fstream>
using namespace std;
class packtrack
{
private:
int n;
int *nv;
int *nw;
int c;
int currentw;
int currentv;
int best;
public:
packtrack()
{
}
packtrack(int n1,int *nv1,int *nw1,int c1):n(n1),nv(nv1),nw(nw1),c(c1)
{
currentw=0;
currentv=0;
best=0;
}
void backtrack(int temp)
{
if(temp>=n)
{
if(currentv>best)
best=currentv;
return;
}
if(currentw+*(nw+temp)<=c)
{
currentw=currentw+*(nw+temp);
currentv=currentv+*(nv+temp);
backtrack(temp+1);
currentw=currentw-*(nw+temp);
currentv=currentv-*(nv+temp);
}
backtrack(temp+1);
}
int res()
{
return best;
}
};
int main()
{
int n=4;
int c=7;
int nw[4];
int nv[4];
ifstream f1("1.txt");
ofstream f2("2.txt");
f1>>n;
f1>>c;
for(int i=0;i<4;i++)
f1>>nw[i];
for(i=0;i<4;i++)
f1>>nv[i];
packtrack p(n,nv,nw,c);
p.backtrack(0);
int best;
best=p.res();
cout<<best<<endl;
f2<<best;
return 1;
}
结果为: