题目:
给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
#include<iostream>
using namespace std;
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
void Knapsack(int *v,int *w,int *x,int c,int n,int m[8][100] )
{
int i,j;
for(j=0;j<c;j++)
{
if(j<w[n])
m[n][j]=0;
else
m[n][j]=v[n];
}
for(i=n-1;i>=1;i–)
{
for(j=w[i];j<=c;j++)
m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);
}
for(i=1;i<=n;i++)
{
if(m[i][c]==m[i+1][c])
x[i]=0;
else
{
x[i]=1;
c=c-w[i];
}
}
x[n]=(m[n][c])?1:0;
return;
}
int main()
{
int i=0;
int n=7;
int w[]={0,2,3,5,7,1,4,1};
int v[]={0,9,5,9,7,6,8,3};
int x[]={0,0,0,0,0,0,0,0};
cout<<“物品总数为:7″<<endl;
cout<<“物品的重量和价值分别为:”<<endl;
cout<<“重量 价值”<<endl;
for(i=1;i<=n;i++)
cout<<” “<<w[i]<<” “<<v[i]<<endl;
int m=15;
int arry[8][100]={0};
Knapsack(v,w,x,m,7,arry);
cout<<“贪心算法的解为:”<<endl;
for(i=1;i<=n;i++)
{
if(i==1)
cout<<x[i];
else
cout<<” “<<x[i];
}
cout<<endl;
return 0;
}