贪心之背包问题

题意:

有n个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为total,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?(注意和0/1背包问题的区别,在背包问题中,可以选择将某种物品的一部分装入背包中,但不可以重复装入)

分析:

选择单位重量价值最大的物品

#include 
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
using namespace std;
const int maxn=30;
int n,C;
double x[maxn];   //储存某一物品装入的比例(全部还是部分)
struct node
{
   double x,y;
}data[maxn];     //x代表物品的重量,y代表物品的价值
int cmp(struct node a,struct node b)
{
    return (a.y/a.x)>(b.y/b.x);
}
int maxval()
{
    x[maxn]={0};
    int i;
    double maxvalue=0;
    for(i=0;data[i].x<=C;i++)
    {
        x[i]=1;     //物品i全部装入
        maxvalue+=data[i].y;
        C=C-data[i].x;
    }
    x[i]=C/data[i].x;   //物品i装入部分
    maxvalue+=x[i]*data[i].y;
    return maxvalue;
}
int main()
{
   while(cin>>n>>C)
   {
       for(int i=0;i
      
      
       
       >data[i].x;       //物品的重量
       for(int i=0;i
       
       
         >data[i].y; // 物品的价值 sort(data,data+n,cmp); //按物品单位重量的价值从大到小排序 cout< 
        
          < 
          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值