博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心法求解背包问题 C++
阅读量:4076 次
发布时间:2019-05-25

本文共 1802 字,大约阅读时间需要 6 分钟。

1.问题描述

    背包问题是给定n个重量为{

w1, w2,… ,wn}、价值为{
v1, v2, … ,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合中选择单位重量价值最大的物品,如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量。

    注意背包问题和0/1背包问题的区别,背包问题中,物品是可以部分装入背包的,0/1背包则不可以,要么装入,要么不装入。

2.算法思路

    贪心法求解背包问题的贪心策略是:单位价值量。因此首先将物品按照单位价值量进行递减排序,从单位价值量最大的物品开始遍历,其重量小于当前背包容量则放入,相应增加背包价值、减少背包容量;直到一个物品重量大于当前背包容量,则将其按照比例部分放入。

3.参考代码

/*贪心法求解背包问题*//*	背包问题是给定n个重量为{w1, w2, … ,wn}、价值为{v1, v2, … ,vn}的物品和一个容量为C的背包,	求这些物品中的一个最有价值的子集,并且要能够装到背包中每次从物品集合中选择单位重量价值最大的物品,	如果其重量小于背包容量,就可以把它装入,并将背包容量减去该物品的重量*/#include
#include
using namespace std;class Good{ private: int num; //物品编号 double weight; //物品重量 double value; //物品价值 public: Good(int n,double w, double v); //构造函数 Good(); //默认构造函数 void init(int n,double w,double v); //初始化 int returnNum(); double returnWeight(); //返回重量 double returnValue(); //返回价值 friend int cmp(Good good1,Good good2); //按照单位价值量降序 friend void KnapSack(Good *good,int num,int capacity);//贪心法求背包};//构造函数Good::Good(int n,double w, double v){ num=n; weight=w; value=v;}//默认构造函数Good::Good(){}//初始化void Good::init(int n,double w,double v){ num=n; weight=w; value=v;}//返回物品编号int Good::returnNum(){ return num;}//返回重量double Good::returnWeight(){ return weight;}//返回价值double Good::returnValue(){ return value;}//按照单位价值量降序排序int cmp(Good good1,Good good2){ return good1.returnValue()/good1.returnWeight() > good2.returnWeight()/good2.returnValue();}//贪心法求解过程void KnapSack(Good *good,int num,int capacity){ double *process=new double[num];//存放问题的解 int i; for(i=0;i
>capacity) { cout<<"请输入物品个数"<
>good_num; Good *good=new Good[good_num];//背包数组 //初始化物品的重量和价值 cout<<"请输入"<
<<"个物品的重量和价值"<
>w; cin>>v; good[i].init(i+1,w,v); } //输出用户输入的信息 cout<<"\n您输入的"<
<<"个物品的信息"<

4.参考结果

你可能感兴趣的文章
Node.js中的事件驱动编程详解
查看>>
mongodb管理与安全认证
查看>>
nodejs内存控制
查看>>
nodejs Stream使用中的陷阱
查看>>
MongoDB 数据文件备份与恢复
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
程序员最核心的竞争力是什么?
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>