当前位置: 首页 > article >正文

【算法】:动态规划--背包问题

背包问题

引言

什么是背包问题?
背包问题就是一个有限的背包,给出一定的物品,如何合理的装入物品使得背包中的物品的价值最大?

01背包

01背包,顾名思义就是每一种给定的物品要么选择,要么不选,求出最终最大的价值。
针对01背包又有两种情况,一种情况是要求最终装满背包,第二种是不用一定装满背包。
下面给出一道例题,并且给出01背包的dp解法。

  1. leetcode LCR 101 : 分割等和子集
    在这里插入图片描述
    解题思路:
    明显,我们可以理解为这里有一个Sum{ai} / 2的背包,我们需要将他装满,这道题比较简单,没有value值。
    状态转移方程:(01背包常见的状态转移方程)
  • dp[i][j] : 前i个元素能够填充大小为j的背包的最大价值
  • dp[i][j] = max { dp[i - 1][j] , dp[i -1][j - Size[i]] + value[i] }

第i个位置,可以不选择它装入背包, 这个时候为dp[i - 1][j] , 也可以选择,这个时候为dp[i -1][j - Size[i]] + value[i]

细节: 
1. 判断j >= Size[i] 
2. 初始化size的时候 + 1,可以更好处理边界条件

在这里插入图片描述
总结:其实无论是否一定需要装满,状态转换方程都差不多,最大的差别是初始化dp的时候存在较大的差异,希望读者注意。

完全背包

完全背包,和01背包的差异就是每一种物品可以选取多次,其他一样,也是可以分为装满和不需要一定装满两种情况。
不太会Latex, 只有手绘。
请添加图片描述
例题:leetcode LRC 103 零钱兑换
在这里插入图片描述
解法:
在这里插入图片描述

总结

这里列举了常见的基础背包问题的解法,再往后学习就是竞赛难度的背包问题,这里我们不再继续赘述,读者想要了解更加复杂的背包问题,可以自行继续探索。

http://www.lryc.cn/news/2385704.html

相关文章:

  • Nginx核心功能
  • AG-UI:重构AI代理与前端交互的下一代协议标准
  • upload-labs通关笔记-第15关 文件上传之图片马getimagesize绕过
  • FFmpeg中使用Android Content协议打开文件设备
  • SQL语句的执行流程
  • Spring 框架的JDBC 模板技术
  • 【游戏设计】游戏玩法与游戏机制
  • Spring的资源Resource和ResourceLoader
  • 字节跳动旗下火山引擎都覆盖哪些领域
  • 【AI实战】从“苦AI”到“爽AI”:Magentic-UI 把“人类-多智能体协作”玩明白了!
  • LeetCode面试经典150题梳理
  • ABP VNext + Orleans:Actor 模型下的分布式状态管理最佳实践
  • Linux之 SPI 驱动框架- spi-mem 框架
  • 振动分析 - 献个宝
  • 从脑电图和大脑记录中学习稳健的深度视觉表征
  • 【论文阅读】——D^3-Human: Dynamic Disentangled Digital Human from Monocular Vi
  • 高分辨率北半球多年冻土数据集(2000-2016)
  • Prompt Tuning:轻量级大模型微调全攻略
  • 【VBA 字典的引用和调用方法】
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的管理与运营策略研究
  • 储能电站:风光储一体化能源中心数字孪生
  • iOS 直播特殊礼物特效实现方案(Swift实现,超详细!)
  • 9. 现代循环神经网络
  • 视频太大?用魔影工厂压缩并转MP4,画质不打折!
  • Python中tqdm进度条工具和enumerate函数的使用详解
  • 最宽温度范围文本格式PT1000分度表-200~850度及PT1000铂电阻温度传感器计算公式
  • 基于Netty架构的充电桩系统设计:服务器运维如何更好保障稳定性?
  • 操作系统学习笔记第1章 操作系统概述(灰灰题库
  • 后端开发实习生-抖音生活服务
  • 机器学习算法-sklearn源起