贪心算法解背包问题(JavaScript)

对于背包之类的最优解问题,大多数都使用的是动态规划,今天突然心血来潮想用贪心算法来解一下,特此记录。

function fn(max,size,values){
 // max:最大容量   size:物品容量集合  values:物品价值集合
  if(max < size[0]){
    return 0
  }
  if(!size || size.length === 0){
    return 0
  }
  if(!values || values.length === 0){
    return 0
  }
  let val = value[0];
  let index = 0;
  for(let i = 0; i < values.length; i++){
    if(values[i] >val && size[i] <= max){
      val = values[i]
      index = i
    }
  }
  let res1= temp(max - size[index],size,values) + val
  let newSize = [...size]
  let newVal = [...values]
  newSize.splice(index,1)
  newVal.splice(index,1)
  let res2 = temp(max,newSize,newVal)
  return Math.max(res1,res2)
}

用贪心算法解思路其实很简单,对于拿不拿物品就只有两种情况,一是拿,拿的话减去背包容量继续执行,递归执行;二是不拿,不拿的话把最大的值给去了,递归执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值