#include <iostream.h>
#define M 5
typedef struct node
{
double weight;
double price;
double x;
int y;
}AdjList[M];
void build_bag(AdjList &bag,int n,int C)
{
int w[M]={12,5,9,3,6};
cout<<"各物品的重量是:{"<<w[0]<<","<<w[1]<<","<<w[2]<<","<<w[3]<<","<<w[4]<<"}"<<endl;
for(int j=0;j<n;j++)
{
bag[j].weight=w[j];
}
int p[M]={24,5,27,9,36};
cout<<"各物品的价值是:{"<<p[0]<<","<<p[1]<<","<<p[2]<<","<<p[3]<<","<<p[4]<<"}"<<endl;
for(int k=0;k<n;k++)
{
bag[k].price=p[k];
bag[k].x=bag[k].price/bag[k].weight;
}
for(int a=0;a<n;a++)
{
int temp=0;
for(int b=0;b<n;b++)
{
if(bag[a].x<bag[b].x)
{
temp++;
}
}
bag[a].y=temp;
}
}
double greedy_knapsack(AdjList &bag,int n,int C)
{
double value=0;
int data=0;
while(data<n)
{
for(int i=0;i<n;i++)
{
if(bag[i].y==data)
{
if((bag[i].weight<=C)&&(C>0))
{
bag[i].x=1;
C=C-bag[i].weight;
value=value+bag[i].price;
}
else if((bag[i].weight>C)&&(C>0))
{
bag[i].x=C/bag[i].weight;
C=0;
value=value+bag[i].x*bag[i].price;
}
else if(C==0)
{
bag[i].x=0;
}
}
}
data++;
}
return value;
}
void main()
{
int n=5;
int C=25;
AdjList bag;
build_bag(bag,n,C);
double maxvalue;
maxvalue=greedy_knapsack(bag,n,C);
cout<<"该背包能创造的最大价值是:"<<maxvalue<<endl;
cout<<"最优解为(:";
for(int i=0;i<n;i++)
{
cout<<bag[i].x<<",";
}
cout<<")"<<endl;
}
部分背包问题
最新推荐文章于 2024-01-17 21:43:55 发布