(贪心)小数背包问题、活动安排问题

一、小数背包问题

小数背包问题与01背包问题的不同

小数背包问题 0 1背包问题
物品可拆分 物品是个不可分的整体
背包一定被装满 背包可能有空余
贪心算法 DP算法

小数背包问题的解决步骤:
一、预处理,把物品按照价值率进行从大到小的排列(希望先装价值率最高的)
二、选择第一个物品(价值率最大),记录装进的重量、价值,及剩余容量
三、循环放物品,直至背包剩余容量为0
思考:小数背包问题可以采用动态规划算法来解决吗?
代码实现:
在重写sort()的compare函数时 ,出错了

int compare(item a,item b){
   
	return (a.vrate>b.vrate)?a.vrate:b.vrate;
} 

这个的含义是返回a,b的vrate最大值 ,并非比较,所以正确的写法应该是:

int compare(item a,item b){
   
	return a.vrate>b.vrate;
} 

可以有很多种重载>的写法,这里先用了两种:
一、重写sort的compare参数

int compare(item a,item b){
   
	return a.vrate>b.vrate;
} 

二、在结构体中重写 >,由于sort默认是从小到大的,所以还需要修改sort的compare

struct item{
   
	int v;//价值 
	int w;//重量
	double vrate;//价值率v/w 
	bool operator >( const item &s) {
    return vrate>s.vrate; }
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值