对于背包之类的最优解问题,大多数都使用的是动态规划,今天突然心血来潮想用贪心算法来解一下,特此记录。
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)
}
用贪心算法解思路其实很简单,对于拿不拿物品就只有两种情况,一是拿,拿的话减去背包容量继续执行,递归执行;二是不拿,不拿的话把最大的值给去了,递归执行。