美文网首页
0-1背包问题

0-1背包问题

作者: 隐号骑士 | 来源:发表于2020-10-27 10:03 被阅读0次

0-1 背包问题是经典的动态规划问题

题目

n件物品和1个容量为W的背包。每种物品均只有一件,第i 件物品的重量为weights[i],价值为values[i],求解将哪些物品装入背包可使价值总和最大。

对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态只是1或0, 此问题称为0-1背包问题。

思路

可以将问题的解设为 f(i, j),其中 i 为物品件数,j为背包的重量。
尝试画一个矩阵来表示它
// TODO

规律

从中可以总结出来规律
f(i, j)= max {f(i-1, j), f(i-1, j-weights[i])+values[i] }

初始值

取矩阵第一排为初始值,即:
若 j < weights[0] , f(i,j) = 0,
若 j >= weights[0] , f(i,j) = values[0]

代码实现

const pack = (values,weights,W)=>{
    let arr = [[]] 
    for(let j=0; j<=W; j++){
        arr[0].push(weights[0]>j ? 0: values[0])
    }
    for(let i=1; i<values.length; i++){
        let tempArr = []
        for(let j=0; j<=W; j++){
            tempArr.push(
                Math.max(
                    arr[i-1][j],
                    j - weights[i] >= 0? arr[i-1][j-weights[i]] + values[i] : 0
                )
            )
        }
        arr.push(tempArr)
    }
    return arr
}

const result = pack([1,2,3,4,5],[1,2,3,4,5],10)

console.log(result)

动态规划三个步骤

  • 最优值函数
  • 状态转移方程
  • 边界条件

拓展-完全背包问题

n件物品和1个容量为W的背包。每种物品没有上限,第i件物品的重量为weights[i],价值为values[i],求解将哪些物品装入背包可使价值总和最大。

拓展-多重背包问题

n件物品和1个容量为W的背包。每种物品最多number[i]件可用,第i件物品的重量为weights[i],价值为values[i],求解将哪些物品装入背包可使价值总和最大。

参考

https://segmentfault.com/a/1190000012829866

相关文章

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 背包问题

    背包问题属于典型的动态规划问题。这里我们将详细介绍0-1背包,完全背包和多重背包问题 一、 0-1背包 有N件物品...

  • 算法-动态规划-背包问题

    背包问题是基础的动态规划问题,包含了0-1背包,完全背包,多重背包等。 0-1背包 存在容量为 的背包 , 件体...

  • 背包问题

    1、前言 背包问题是典型的动态规划问题,它有非常多的类型,本文讨论最常见的0-1背包问题 0-1背包问题描述:有一...

  • (python实现)购物单问题

    购物单问题实际上是0-1问题,在解决这个问题之前,要理解0-1背包问题。可以自己百度或者阅读我对0-1背包问题的理...

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 动态规划常见面试题

    子序列类型编辑距离 最长递增子序列 最大子数组 最长公共子序列 背包问题0-1背包问题 子集背包问题 完全背包问题...

  • 编程

    今天用0-1算法,编写了背包问题!

  • LeetCode 动态规划专题 5:0-1 背包问题

    这一节我们介绍使用动态规划解决的一个非常经典的问题:0-1 背包问题。 0-1 背包问题描述 问题描述: 有一个背...

  • 数据结构与算法笔记day23:动态规划

    1初识动态规划 这节课的内容不涉及动态规划的理论,而是通过两个例子:0-1背包问题、0-1背包问题升级...

网友评论

      本文标题:0-1背包问题

      本文链接:https://www.haomeiwen.com/subject/adqtvktx.html