在0/1背包问题中,需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为vi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。
如:输入 n=5,c=10 w[n]={2,2,6,5,4},v[n]={6,3,5,4,6} 输出 最优解X={1,1,0,0,1},1表示装入,0表示不装入。最大价值为15
#include
#include
#define maxn 100
using namespace std;
int w[maxn],v[maxn]; //w重量,v价值
int V[maxn][maxn],x[maxn];//V存放迭代结果,x存储装入背包的物品
int C,n;//C容量,n数量
int inp()
{
for(int i=0;i<=n;i++) //初始化第0列
V[i][0]=0;
for(int i=0;i<=C;i++) //初始化第0行
V[0][i]=0;
for(int i=1;i<=n;i++) //计算第i行,进行第i次迭代
{
for(int j=1;j<=C;j++)
{
if(j
>n>>C)
{
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=n;i++)
cin>>v[i];
cout<
<
=1;i--) //求出装入背包的物品,1表示装入,0表示不装入 { if(V[i][C]>V[i-1][C]) { x[i]=1; C-=w[i]; } else { x[i]=0; } } for(int i=1;i<=n;i++) cout<
<<" "; cout<