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

动态规划笔记

完全背包

完全背包指的是物品可重复使用

物品外循环,背包内循环

for (int i = 0; i < coins.size(); i++) { // 遍历物品(硬币)for (int j = coins[i]; j <= amount; j++) { // 遍历背包(金额),从小到大// 状态转移:使用当前硬币coins[i]更新金额j的最小硬币数}
}

-核心逻辑: 逐个处理每个硬币,对于每个硬币,更新所有可能的背包容量(金额)
-重复选择的逻辑在哪: 背包遍历的顺序是从小到大,当处理物品coins[i]时,状态dp[j-coins[i]]时已经处理过的状态,包含coins[i]的使用,因此允许重复使用同一物品

举例:处理硬币2时,计算dp[4]时候的状态会用到dp[2],这时候已经包含了硬币2的使用,实现了重复使用

背包外循环,物品内循环

for (int j = 1; j <= amount; j++) { // 遍历背包(金额)for (int i = 0; i < coins.size(); i++) { // 遍历物品(硬币)if (j >= coins[i] && dp[j - coins[i]] != INT_MAX) {dp[j] = min(dp[j], dp[j - coins[i]] + 1);}}
}
  • 核心逻辑: 逐个处理背包容量,对于每个容量,尝试使用所有物品进行更新.
  • 重复选择的实现: 背包遍历顺序是从小到大,因此处理容量j时,物品coins[i]的多次使用会被自动处理.例如:
    用硬币1时,j-1=3的状态已经包含了硬币1的多次使用
    用硬币2时,j-2=2的状态已经包括了硬币2的使用

01背包

物品外循环,背包内循环

for (int i = 0; i < items.size(); i++) { // 物品外循环for (int j = amount; j >= items[i]; j--) { // 背包从大到小dp[j] = min(dp[j], dp[j - items[i]] + 1); // 避免重复选同一物品}
}

要注意的是,这里的背包遍历,是从大到小,理由:
如果是从小到大遍历,j-items[i]的状态是当前物品处理过的状态,会导致同一物品被多次选择,从大到小遍历可以保证每个物品仅影响后续更大的背包容量,实现仅选一次

物品内循环,背包外循环

不行,这样背包从小到大也无法做到物品仅仅选一次,因为背包会容量会遍历所有物品,导致重复计算

http://www.xdnf.cn/news/1060039.html

相关文章:

  • FastMCP框架进行MCP开发:(一)基础环境搭建及测试
  • 云XR(AR/VR)算力底座关键特征与技术路径
  • 颈部不自主偏移现象解析
  • systemverilog中关于多线程的若干思考
  • SAP LPD(launchpad)配置使用手册
  • C#学习13——正则表达式
  • 计算机网络学习笔记:TCP可靠传输实现、超时重传时间选择
  • leetcode 2294. 划分数组使最大差为 K 中等
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 机器学习×第十二卷:回归树与剪枝策略——她剪去多余的分支,只保留想靠近你的那一层
  • Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【环境搭建 / 点灯】
  • 基于微信小程序和深度学习的宠物照片拍摄指导平台的设计与实现
  • 【AI编程】第3期,针对AI生成的改枪码列表创建对应的数据库表
  • 主成分分析(PCA)例题——给定协方差矩阵
  • 关于嵌入式编译工具链与游戏移植的学习
  • 【图论 DFS搜索树】P10298 [CCC 2024 S4] Painting Roads|普及+
  • threejs 实现720°全景图,;两种方式:环境贴图、CSS3DRenderer渲染
  • 问题排查之nginx请求日志
  • 火山引擎TTS使用体验
  • FPGA基础 -- Verilog 行为级建模之条件语句
  • 阿里云主机自动 HTTPS 证书部署踩坑实录
  • 自演进多智能体在医疗临床诊疗动态场景中的应用
  • 24.分页查询
  • 学习大模型---需要掌握的数学知识
  • FPGA基础 -- Verilog行为级建模之initial语句
  • 系统思考与核心竞争力
  • FPGA基础 -- Verilog行为建模之循环语句
  • Conda 常用命令大全:从入门到高效使用
  • 【学习笔记】2.2 Encoder-Decoder
  • 基于SVM和dbs的孤岛检测算法