背包问题总结

news/2024/7/5 1:50:26

目录

01背包

完全背包

总结 


背包问题算是动态规划的经典问题了,一定要记住动规五部曲

1.定义dp数组

2.确定递推公式

3.初始化

4.确定遍历顺序

5.验证

01背包

关于01背包就是给定背包的容量和每个的物品价值,一个物品只能放一次,求背包的最大价值

dp[i][j]表示从前i个物品里任取放入背包大小为j的最大价值为dp[i][j]

01背包的递推公式:dp[i][j]=Math.max(dp[i-1][j],dp[i-weight(i)]+values[i])

初始化:dp[0]=0

遍历顺序:先遍历物品或者遍历背包都可以

                 一维dp数组只能先遍历物品后遍历背包,且背包的遍历顺序是倒序

完全背包

关于完全背包就是给定背包的容量和每个的物品价值,一个物品可以放无数次,求背包的最大价值

dp[i][j]表示从前i个物品里任取放入背包大小为j的最大价值为dp[i][j]

01背包的递推公式:dp[i][j]=Math.max(dp[i-1][j],dp[i-weight(i)]+values[i])

初始化:dp[0]=0

遍历顺序:先遍历物品和先遍历背包都可以,都是正序

                   如果求组合数就是外层for循环遍历物品,内层for遍历背包。

                   如果求排列数就是外层for遍历背包,内层for循环遍历物品。

总结 

问能否装满背包,或者最大价值是多少

dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i])

问装满背包有几种方法(几种组合)

dp[j]+=dp[j-nums[i]]

问装满背包的最少物品

dp[j]=Math.min(dp[j],dp[j-nums[i]]+1)  初始化为最大值 dp[0]=0


http://lihuaxi.xjx100.cn/news/1380063.html

相关文章

git远程一个分支对应本地两个分支推送

git远程一个分支对应本地两个分支推送 你可以使用以下命令将两个本地分支推送到远程仓库中的一个远程分支&#xff1a; 首先&#xff0c;将第一个本地分支推送到远程仓库&#xff1a; git push <远程仓库名称> <本地分支名称>:<远程分支名称>例如&#xff…

当ChatGPT应用在汽车行业,具体有哪些场景?

​ ChatGPT有潜力彻底改变汽车行业并将其提升到新的高度。在ChatGPT的加持下&#xff0c;该行业的多个领域都将取得重大变化。 利用ChatGPT作更高级的虚拟助理 你可能用过现有的虚拟助理&#xff0c;它们一系列的回复有时候让人不得不感叹一句“人工智障”&#xff01;然而&a…

CISA学习笔记-第一章、信息系统审计过程

传统的审计三方关系理论指明&#xff0c;审计作为独立于会计记录之外的一项重要职能&#xff0c;是公司财务信息公允可靠的有力保障&#xff0c;制约着会计行为&#xff0c;制衡了会计权力。 1. IS审计和保障标准、指南、工具 职业道德规范 信息技术保证框架&#xff08;ITAF&a…

python怎么实现tcp和udp连接

目录 什么是tcp连接 什么是udp连接 python怎么实现tcp和udp连接 什么是tcp连接 TCP&#xff08;Transmission Control Protocol&#xff09;连接是一种网络连接&#xff0c;它提供了可靠的、面向连接的数据传输服务。 在TCP连接中&#xff0c;通信的两端&#xff08;客户端和…

无涯教程-jQuery - triggerHandler( event, data )方法函数

triggerHandler(event&#xff0c;[data])方法触发元素(用于特定事件类型)上所有绑定的事件处理程序&#xff0c;而无需执行浏览器的默认操作&#xff0c;冒泡或实时事件。 triggerHandler( event, [data] ) - 语法 selector.triggerHandler( event, [data] ) 这是此方法使用…

互联网摸鱼日报(2023-07-27)

互联网摸鱼日报(2023-07-27) InfoQ 热门话题 支付宝资深安全专家马传雷&#xff08;岳立&#xff09;&#xff0c;确认担任QCon北京业务安全技术专题出品人 企业如何制定有效的多云策略来满足业务需求&#xff1f; 2023 AIGC 知识库 飞桨大模型分布式训练技术 如何用最新的…

LeetCode第 N 个泰波那契数 (认识动态规划)

认识动态规划 编写代码代码空间优化 链接: 第 N 个泰波那契数 编写代码 class Solution { public:int tribonacci(int n) {if(n 0){return 0;}else{if(n 1 || n 2)return 1;}vector<int> dp(n 1);dp[0] 0;dp[1] 1;dp[2] 1;for(int i 3;i < n;i){dp[i] dp[i-3]…

rust reborrow - 重借用

两个知识点: 第一:对于不可变借用&T,它的传递属于Copy语意。对于可变借用&mut T它的传递属于Move语意或reborrow。 第二:可变引用在同一个时刻只能拥有一个,但是有一个重借用(reborrow)的方式,可以让借用重新获得可变引用。 下面为reborrow的三种方式 明确写出…