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

代码随想录打卡第三十天 动态规划

学习目标:

  • 学习动态规划

学习内容:

  1. 01背包问题

学习时间:

  • 2025-06-17 周二晚上

学习产出:

背包问题

01背包:每件物品只能用一次,对于每件物品,即放或者不放。
完全背包:物品可以一直放。

01背包:
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
可以得到递推公式:对于第i件物品,对于重量为j的背包产生的最大价值为:不放入该件物品时的最大价值dp[i-1][j]与放入该物品时的最大价值dp[i-1][j-weight[i]]+values[i]的最大值,即:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
如果我们把dp[i-1]的数据先copy到第i行,那么得到递推公式:
dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);
那完全可以我们只维护一行数组,每次遍历物品时用上一层的dp[j]来进行更新即可,更新为一维数组递归公式为:
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
右边的dp[j]表示上一层即dp[i-1][j]得到的结果

注意,如果用一维数组表示,那么只能倒序才能保证每个物品只放入了一次,具体可以自己推导。

  • 416. 分割等和子集
解题思路

先求出目标和以及初始化dp[target]还是很直观。但是对于初次接触背包问题来讲,在想dp[j]表示的涵义时没想明白。dp[j]应该表示为:当背包最大容量为j时,放入i和不放入i所能产生的最大价值是多少。如果最大容量为target且当前所能产生的最大价值为target时,表示存在。转化为本题为,加入在不超过当前最大和的情况下,放入哪些元素能使的当前的目标和最大(接近target)
`class Solution {
public boolean canPartition(int[] nums) {

    int sum = 0;boolean result = false;for(int i = 0;i<nums.length;i++) {sum+=nums[i];}if(sum % 2 != 0) {return result;}int target = sum / 2;int[] dp = new int[target+1];for(int i = 0 ; i < nums.length ; i++) {for (int j = target ; j >= nums[i] ; j--) {dp[j] = Math.max(dp[j],dp[j-nums[i]]+nums[i]);if(dp[j] == target) {result = true;}}}return result;
}

}`

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

相关文章:

  • 论文笔记 <交通灯> IntelliLight:一种用于智能交通灯控制的强化学习方法
  • 性能测试|数据说话!在SimForge平台上用OpenRadioss进行汽车碰撞仿真,究竟多省时?
  • 物联网传输网关、RTU、DTU及SCADA系统技术解析
  • Vue-8-前端框架Vue之应用基础响应式数据和计算属性
  • React 中实现获取未来5天的天气预报
  • FPGA基础 -- Verilog语言要素之标识符
  • 同态加密类型详解:部分同态加密,全同态加密
  • 在 CEP插件界面 打开网页 简单方法
  • 使用 Tailwind CSS 进行样式设计,并与 Next.js 和 TypeScript 无缝集成
  • Vue-Router笔记
  • Linux基本指令
  • 【计算机常识:Windows】--CMD命令详解
  • 我们感知的世界,只是冰山一角?
  • 输入数量未知如何设置输入
  • 安装 WSL2 与设置​
  • 函数重载与函数模板
  • 电阻篇---上拉电阻
  • JavaScript 精度问题深度解析
  • LeetCode--30.串联所有单词的子串
  • LLM4rec-rednote
  • YOLOv4 训练与推理流程详解
  • 105. Java 继承 - 静态方法的隐藏
  • 工作中使用到的单词(软件开发)_第四版
  • 修改了xml布局代码,页面使用了databinding,此时不开启kapt也可以吗
  • firewalld防火墙(一):基础概念、配置详解与实战应用
  • PaddleOCR项目实战(3):SpringBoot服务开发之全局异常处理
  • 华为OD-2024年E卷-增强的strstr[100分] -- python
  • OC-UI学习-Auto Layout使用
  • 自主学习-《Absolute Zero: Reinforced Self-play Reasoning with Zero Data》
  • 《贵州安顺棒垒球》国家队运动员·棒球1号位