请帮忙看一下这道题怎么回事,没有错误但是运行不了。 10
/*给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,0/1背包问题是如何选择装入背包的物品(物品不可分割),使得装入背包中物品的总价值最大?*/#in...
/*给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,
0/1背包问题是如何选择装入背包的物品(物品不可分割),
使得装入背包中物品的总价值最大?*/
#include<iostream>
using namespace std;
int Weight;
int n;
int w[100];
int p[100];
int bestP=0;
int cp=0;
int cw=0;
int b[100];
void BackTrack(int i)
{
if(i>n)
{
cout<<"背包获得最大价值为:"<<cp<<endl;
cout<<"解向量为:";
/*
for(int d=1;d<=n;d++)
{
cout<<b[d];
}
cout<<endl;
*/
if(bestP<cp)
bestP=cp;
}
if((cw+w[i])<=Weight)
{
b[i]=1;
cw=cw+w[i];
cp=cp+p[i];
BackTrack(i+1);
cw=cw-w[i];
cp=cp-p[i];
}
b[i]=0;
BackTrack(i+1);
}
void main()
{
cout<<"请输出物品的个数:"<<endl;
cin>>n;
cout<<"请输出各物品的重量:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
cout<<"请输出各物品的价值:"<<endl;
for( i=1;i<=n;i++)
{
cin>>p[i];
}
cout<<"请输入背包的容量:"<<endl;
cin>>Weight;
for(int h=1;h<=n;h++)
{
b[h]=0;
}
BackTrack(1);
} 展开
0/1背包问题是如何选择装入背包的物品(物品不可分割),
使得装入背包中物品的总价值最大?*/
#include<iostream>
using namespace std;
int Weight;
int n;
int w[100];
int p[100];
int bestP=0;
int cp=0;
int cw=0;
int b[100];
void BackTrack(int i)
{
if(i>n)
{
cout<<"背包获得最大价值为:"<<cp<<endl;
cout<<"解向量为:";
/*
for(int d=1;d<=n;d++)
{
cout<<b[d];
}
cout<<endl;
*/
if(bestP<cp)
bestP=cp;
}
if((cw+w[i])<=Weight)
{
b[i]=1;
cw=cw+w[i];
cp=cp+p[i];
BackTrack(i+1);
cw=cw-w[i];
cp=cp-p[i];
}
b[i]=0;
BackTrack(i+1);
}
void main()
{
cout<<"请输出物品的个数:"<<endl;
cin>>n;
cout<<"请输出各物品的重量:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
cout<<"请输出各物品的价值:"<<endl;
for( i=1;i<=n;i++)
{
cin>>p[i];
}
cout<<"请输入背包的容量:"<<endl;
cin>>Weight;
for(int h=1;h<=n;h++)
{
b[h]=0;
}
BackTrack(1);
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询