[豪の算法奇妙冒险] 代码随想录算法训练营第三十五天 | 01背包问题-二维dp解法、01背包问题-一维dp解法、416-分割等和子集

news/2026/1/21 21:57:22/文章来源:https://www.cnblogs.com/SchwarzShu/p/19514151

代码随想录算法训练营第三十五天 | 01背包问题-二维dp解法、01背包问题-一维dp解法、416-分割等和子集


01背包问题-二维dp解法

文章讲解:https://programmercarl.com/背包理论基础01背包-1.html

视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i][j]表示在[0,i]物品中任取,放入容量为j的背包中的最大价值

  1. 确定递推公式

​ 状态转移方程 dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weight[i]] + value[i])

​ 不放第i个物品时,dp[i][j] = dp[i-1][j]

​ 放第i个物品时,dp[i][j] = dp[i-1][j-weight[i]] + value[i]

  1. dp数组如何初始化

​ 当 j = 0,即背包容量为0的时候,背包装不下任何物品,所以最大价值为0,第零列全部初始化为0

​ 第零行,当背包容量不够装物品0的时候,初始化为0,背包容量够的时候初始化为物品0的价值

  1. 确定遍历顺序

​ 根据递推公式 dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-weight[i]] + value[i]),当前dp取值依赖于它左上方dp的值,所以是从左往右,一行行往下遍历

​ i为物品,j为背包,双重for循环外层遍历物品i,内层遍历背包j

  1. 举例推导dp数组

01背包问题-一维dp解法

文章讲解:https://programmercarl.com/背包理论基础01背包-2.html

视频讲解:https://www.bilibili.com/video/BV1BU4y177kY?vd_source=b989f2b109eb3b17e8178154a7de7a51&spm_id_from=333.788.videopod.sections

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[j]表示容量为j的背包所能装的最大价值

  1. 确定递推公式

​ 状态转移方程 dp[j] = Math.max(dp[j],dp[j-weight[i]] + value[i])

​ 不放第i个物品时,dp[j] = dp[j]

​ 放第i个物品时,dp[j] = dp[j-weight[i]] + value[i]

  1. dp数组如何初始化

​ 全部初始化为0

  1. 确定遍历顺序

​ 根据递推公式 dp[j] = Math.max(dp[j],dp[j-weight[i]] + value[i])

​ i为物品,j为背包,双重for循环外层顺序遍历物品i,内层倒序遍历背包j

  1. 举例推导dp数组

LeetCode416 分割等和子集

题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/

文章讲解:https://programmercarl.com/0416.分割等和子集.html

视频讲解:https://www.bilibili.com/video/BV1rt4y1N7jE/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 可以抽象为01背包问题,第i个物品的重量和价值都等于nums[i]

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[j]表示容量为j的背包所能装的最大价值

  1. 确定递推公式

​ 状态转移方程 dp[j] = Math.max(dp[j],dp[j-weight[i]] + value[i])

​ 不放第i个物品时,dp[j] = dp[j]

​ 放第i个物品时,dp[j] = dp[j-weight[i]] + value[i]

  1. dp数组如何初始化

​ 全部初始化为0

  1. 确定遍历顺序

​ 根据递推公式 dp[j] = Math.max(dp[j],dp[j-weight[i]] + value[i])

​ i为物品,j为背包,双重for循环外层顺序遍历物品i,内层倒序遍历背包j

  1. 举例推导dp数组

image-20260121214135122

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

expo-video实现横屏播放

我在使用expo-video的过程中,发现它的全屏功能很是差强人意,所以想自己二次封装一下 如果看过我之前的expo文章,应该可以轻松的读懂下面的代码 一、安装相关依赖 npx expo install expo-video expo-router expo-scr…

2026百度AI优化GEO服务商 TOP5:综合实力强的文心一言GEO服务商领跑AI搜索破局赛道

综合实力强的 GEO服务商 赋能品牌实现 百度AI 精准曝光与流量转化 随着生成式人工智能的迅速发展,AI搜索平台正在重构传统信息分发与获取的模式。特别是以百度“文心一言”为代表的AI原生平台,逐步替代了传统的搜索入…

【珍藏干货】从零开始实战:企业级AI售前机器人开发全流程(含三大核心系统详解)

“从0到1完成一个企业级AI售前机器人的实战指南。” AI应用中除了我们常见的工作流、各类功能节点之外&#xff0c;通常还会附带有三个辅助系统&#xff1a; 用来AI记住用户的历史交互信息&#xff0c;从而提供更连贯、个性化和高效的响应的记忆系统用来验证AI在实际应用中的…

盘点7款热门AI论文写作助手:提升学术效率并有效减少重复内容

AI写论文工具排名&#xff1a;7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper …

想让win11暂停系统自动更新要怎么办?如何彻底禁止win11系统自动更新

Windows 11的自动更新功能&#xff0c;初衷是为了提升系统安全与性能。但在实际使用中&#xff0c;频繁的后台下载和强制重启往往让人困扰&#xff0c;尤其是对正在工作、游戏或需要稳定环境的用户来说&#xff0c;更是不可忽视的问题。因此&#xff0c;学会灵活地关闭或延迟自…

AI论文助手Top8:全方位对比主流平台写作水准与降重能力,高效解决用户需求

AI论文生成工具排行榜&#xff1a;8个网站对比&#xff0c;论文降重写作功能全 工具对比总结 以下是8个AI论文工具的简要排名&#xff0c;基于核心功能、处理速度和适用性对比。排名侧重实用性与用户反馈&#xff0c;数据源于引用内容案例&#xff1a; 工具名称 主要功能 优…

Leetcode 238. Product of Array Except Self

问题理解 给定一个整数数组 nums,要求返回一个新数组 answer,其中 answer[i] 是除 nums[i] 以外所有元素的乘积。注意,有0存在。思路 第一个想法是类似sliding window法,先算第 1~(n-1) 个元素的乘积,作为ans[0],…

电脑win11系统怎么关闭自动更新,win11暂停和关闭系统自动更新6大招轻松搞定

Windows 11的自动更新功能&#xff0c;初衷是为了提升系统安全与性能。但在实际使用中&#xff0c;频繁的后台下载和强制重启往往让人困扰&#xff0c;尤其是对正在工作、游戏或需要稳定环境的用户来说&#xff0c;更是不可忽视的问题。因此&#xff0c;学会灵活地关闭或延迟自…

Oracle数据库迁移至KingbaseES:完整实战指南

Oracle数据库迁移至KingbaseES&#xff1a;完整实战指南 KingbaseES内部提供了大量的Oracle兼容特性&#xff0c;因此&#xff0c;在实际的迁移过程中&#xff0c;一般只需对导出脚本做很少的修改&#xff0c;甚至在迁移对象功能全兼容的情况下可以不做任何修改。不仅如此&…

【异常】FreeMarker 模板文件找不到问题解决方案 Template not found for name “mail/captcha.ftl“.

一、报错内容 cn.hutool.core.io.IORuntimeException: TemplateNotFoundException: Template not found for name "mail/captcha.ftl". The name was interpreted by this TemplateLoader: ClassTemplateLoader(classLoader="jdk.internal.loader.ClassLoaders…

保姆级教程:Ubuntu搭建本地AI助手,从Docker到DeepSeek-R1一站式指南,建议收藏!

本文主要介绍如何在Ubuntu操作系统环境下&#xff0c;零基础快速安装Docker环境、安装Ollama、安装本地大模型DeepSeek-R1和大模型可视化工具Open WebUI&#xff0c;快速在本地搭建一款专属AI智能小助手。 1.检查Docker环境 检查是否已安装docker运行环境&#xff0c;在控制台…

NAS —— Centos8挂载Nas到本地目录使用(多图完整教程)

需求与结果 需求:有一台Centos8台式机、一台Synology Nas(DS821),需要将Nas挂载到Centos8上目录上进行使用。 最终结果: 步骤 1、首先保证Centos8可以ping通NAS设备、同时可在Centos8上访问NAS网页端。        2、进入NAS网页操作 (1) 进入DSM控制面板 → 共享文件…

由特殊到一般

lc3301 从最大元素开始贪心 对数组降序排序后&#xff0c;让每个元素不超过前一个元素减1 若出现非正数则返回-1&#xff0c;否则计算数组元素总和 class Solution { public: long long maximumTotalSum(vector<int>& maximumHeight) { ranges::sort(max…

【AI+教育】实践:从策略优化到群体应用的探索

例如&#xff0c;有研究聚焦智能苏格拉底绘画机器人的开发。该机器人内置苏格拉底对话模式&#xff0c;这是一种古老的对话模式。苏格拉底的对话模式&#xff0c;主张通过不断追问&#xff0c;引导人们对自身所做之事进行更深层次的反思与思考。研究通过苏格拉底追问式构建多智…

深入解析:基于势场法的多智能体机器人编队控制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

吐血推荐8个AI论文软件,助你轻松搞定本科生毕业论文!

吐血推荐8个AI论文软件&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI工具让论文写作不再难 对于许多本科生来说&#xff0c;撰写毕业论文是一项既复杂又充满挑战的任务。从选题到资料收集&#xff0c;从大纲搭建到初稿完成&#xff0c;每一个环节都可能让人感到手足无…

揭秘提示工程架构师在电子商务应用的领先策略

揭秘提示工程架构师在电子商务应用的领先策略&#xff1a;开启电商智能新时代 关键词&#xff1a;提示工程架构师、电子商务、语言模型、用户体验、个性化推荐、智能客服 摘要&#xff1a;本文深入探讨提示工程架构师在电子商务领域的关键作用及其领先策略。通过生动的比喻和…

SDL2库基础使用

1.初始化 SDL2 子系统(视频相关),失败则打印错误并返回 -1 if (SDL_Init(SDL_INIT_VIDEO)) {fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); // 输出初始化失败原因return -1; // 返回错误码 }2.…

android 系统中间件和 平台中间件 的区别,Framework等

这是一个非常专业的问题&#xff0c;涉及到Android系统架构的核心层次。简单来说&#xff0c;平台中间件是通用、标准化的“官方层”&#xff0c;而系统中间件是厂商深度定制、差异化的“优化层”。 下面我通过一个表格来清晰地概括两者的主要区别&#xff0c;然后再详细解释&a…

宝妈宝爸必看!儿童羽绒服十大名牌揭秘

宝妈宝爸必看!儿童羽绒服十大名牌揭秘开篇引入 家人们,冬天的寒风那叫一个凛冽,每次带娃出门,看着孩子被冻得小脸蛋红扑扑的,当家长的真是心疼!给孩子选一件暖和又靠谱的羽绒服,就成了咱当务之急。可市场上儿童…