#include<iostream>
using namespace std;
#define N 100
int w[N];
int v[N];
int x[N];
int n,c;
int cw=0;
int cv=0;
int bv=0;
int bx[N];
void intput()
{
cout<<"请输入物品的个数:"<<endl;
cin>>n;
cout<<"请输入每个物品的重量和价值:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
cout<<"请输入背包的容量:"<<endl;
cin>>c;
}
void output()
{
cout<<"最优解为:"<<bv<<endl;
cout<<")";
for(int i=1;i<=n;i++)
{
cout<<bx[i]<<"";
}
cout<<")";
}
void backtrack(int t)
{
if(t>n)
{
if(cv>bv)
{
bv=cv;
for(int i=1;i<=n;++i)
{
bx[i]=x[i];
}
}
}
else
{
for(int i=0;i<=1;++i)
{
x[t]=i;
if(i==0)
{
backtrack(t+1);
}
else
{
if((cw+w[t])<=c)
{
cw+=w[t];
cv+=v[t];
backtrack(t+1);
cw-=w[t];
cv-=v[t];
}
}
}
}
}
int main(int argc,char *argv[])
{
intput();
backtrack(1);
output();
return 0;
}
0-1背包回溯
于 2023-05-22 12:31:32 首次发布