部分背包问题

#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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值