My背包九讲——概述

什么是背包问题

My背包九讲——概述

百度百科:背包问题(Knapsackproblem)是一种组合优化的NP完全问题。正确代码 问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。注意事项问题的名称来源于如何选择最合适的物品放置于给定背包中。 ,也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?

别人的理解:背包问题指这样一类问题,题意往往可以抽象成:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。

我的理解:首先我们应该明白背包问题是是动态规划的一个种重要的铺垫(也可以理解为是动态规划问题的一个重要的分支),所以它一定拥有动态规划的性质,背包问题是一些动态规划问题的经过抽象后的结合实际问题的产物(听大佬的理解)背包问题,其实是一个很暴力的问题,它就像二进制枚举,把每一种情况都枚举出来(这里被枚举的情况指的是:在当前情况、条件下看来一定是最优解),根据之前的枚举的所有情况 、根据题意(比如让找最大、小值),找出最优解,还有就是 背包问题处处最优(当前的最优一定是根据之前的最优推出来.......经过许多次递推之后 最终答案的最优解 也可 根据之前的最优解推出来)的思想注意事项

动态规划(DP):动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法,动态规划程序设计往往是针对一种最优化问题(百科),读完百科给的定义基本上没啥用(说的太高深了),我以一个初学者的角度说来我对动态规划的一个简单理解,从动态规划中“动态”二字我们可以看出,它在解决问题的时候一定 是根据不同的情况(根据题目的不同条件)作出当前情况下最优的决策、最优选择(我感觉这就像,动态规划的程序是智能的、聪明的,能够自己对各种条件应,做一个最优选择)正确代码

背包问题的分类

目录

第一讲 01背包问题

这是最基本的背包问题,但又是其它背包问题的对重要基础,每个物品最多只能放一次。

第二讲 完全背包问题

第二个基本的背包问题模型,每种物品可以放无限多次。

第三讲 多重背包问题

每种物品有一个固定的次数上限。

第四讲 混合三种背包问题

将前面三种简单的问题叠加成较复杂的问题。

第五讲 二维费用的背包问题

一个简单的常见扩展。

第六讲 分组的背包问题

一种题目类型,也是一个有用的模型。后两节的基础。

第七讲 有依赖的背包问题

另一种给物品的选取加上限制的方法。

第八讲 泛化物品

我自己关于背包问题的思考成果,有一点抽象。

第九讲 背包问题问法的变化

试图触类旁通、举一反三。

附:大佬的背包九讲

————————————————

上一篇:python学习之旅


下一篇:Python学习笔记(三)字符串类型及其操作(2)