动态规划专练:力扣第518、377题
力扣第518题-零钱兑换Ⅱ1.本题是经典的完全背包动态规划问题核心递推公式为dp[j] dp[j - coins[i]]即当前金额j的组合总数等于上一轮的组合数加上本轮减去该硬币金额的组合数。一定要记得令dp[0] 1在本题的意思为“金额为0时只有不选任何硬币这1种方案”。完整代码如下1. int change(int amount, int* coins, int coinsSize) { 2. // dp[j]凑成金额j的组合方案总数用unsigned long long防止数值溢出 3. unsigned long long dp[amount 1]; 4. memset(dp, 0, sizeof(dp)); 5. // 金额0不选任何硬币存在1种方案 6. dp[0] 1; 7. 8. // 完全背包硬币可无限选取外层遍历硬币种类 9. for (int i 0; i coinsSize; i){ 10. // 正序遍历金额允许重复使用当前硬币 11. for (int j coins[i]; j amount; j){ 12. dp[j] dp[j - coins[i]]; 13. } 14. } 15. 16. // 转换为int返回最终凑amount的方案数 17. return (int)dp[amount]; 18. }该算法时间复杂度为O(coinsSize * amount)空间复杂度为O(amount)。本题的提交测试算例需要使用unsigned long long才能通过否则会溢出。2.经过这一系列的题目训练后发现题目中如果要求方案数最值则递推公式就要使用fmax或fmin如果要求“恰好等于某个值”的方案数则递推公式就要使用累加。3.对于dp[0]的初始化取决于题目中的约束条件根据实际情况来判断当容量为0时应该初始化为多少。4.纯完全背包问题是求凑成背包最大价值是多少而本题是要求凑成总金额的物品组合个数所以两层for循环不能互换。1纯完全背包的定义给定背包容量物品有重量和价值求能装入的最大总价值。求极值根本不关心物品是以什么顺序放进去的它只关心最终这个子集能达到多大的数值。所以两层for循环可以互换。2本题的定义给定总金额求凑成总金额的硬币组合数。组合是无序的外层硬币种类、内层金额可以保证后加入的硬币永远排在先加入的硬币后面也就是说一定是先处理完之前的硬币才会去处理后来的硬币这样就能保证不会出现重复情况。如果互换了变成外层金额、内层硬币种类就会导致在每一步容量都会去重新审视所有的硬币最终就会算成有重复的排列数而不是组合数力扣第377题-组合总和Ⅳ1.本题是一道完全背包问题与以往题目不同的一点在于本题的组合包含顺序不同的重复情况也就是说必须令外层循环为target内层循环为数的种类。完整代码如下1. int combinationSum4(int* nums, int numsSize, int target) { 2. // dp[i]凑成总和 i 的组合排列总数ull防止大数溢出 3. unsigned long long dp[target 1]; 4. memset(dp, 0, sizeof(dp)); 5. dp[0] 1; // 和为0空排列1种方案 6. 7. // 先遍历容量总和再遍历数字 → 求排列顺序不同算不同解 8. for (int i 0; i target; i){ 9. for (int j 0; j numsSize; j){ 10. if (i nums[j]){ 11. dp[i] dp[i - nums[j]]; 12. } 13. } 14. } 15. 16. return (int)dp[target]; 17. }该算法时间复杂度为O(numsSize * target)空间复杂度为O(target)。2.交换for循环就能求重复情况这一结论是比较抽象的下面是ai根据本题给出的详细推演过程因为外层是容量每一次容量增加所有的硬币都会重新获得一次“站在队伍最后”的平等竞争机会这就是为什么它能完美穷举出所有不同排列的原因。3.如果target为0题目上并没有将空集列为答案理论上dp[0]应该初始化为0但实际上需要初始化为1。本题计算组合数需要一个“火种”否则后续的累加的结果将一直是0。4.可以将dp[0]的初始化进行一个总结1最终结果求方法数时恰好等于某个值的组合数因为递推公式中仅依靠dp数组中的元素来进行累加所以必须需要一个火种来启动此时就需要将dp[0]初始化为1。2最终结果求最值时放入背包的最大价值、不大于某个值的最大子集因为递推公式中都会用到fmax或者fmin且其中非自身元素的那一项都会额外加上一个常数价值val或者数量1可以依靠自身来启动所以将dp[0]初始化为0避免干扰后续累加的那个常数。

相关新闻

运放当比较器:原理、差异、实战电路与避坑指南

运放当比较器:原理、差异、实战电路与避坑指南

1. 从“放大”到“判决”:为什么运算放大器能当比较器用? 如果你刚开始接触硬件电路设计,可能会觉得运算放大器和比较器是两种完全不同的东西。一个名字叫“放大器”,听起来是把小信号变大;另一个叫“比较器”&#xf…

2026/10/23 16:13:14 阅读更多 →
ChatGPT-vs-AI简历工具哪个好-通用大模型与专业AI简历工具7项能力实测对比

ChatGPT-vs-AI简历工具哪个好-通用大模型与专业AI简历工具7项能力实测对比

文章目录一、先说结论:ChatGPT和专业AI简历工具不是"谁取代谁"的关系1.1 一个真实场景扎心了1.2 本文的立场:不是"二选一",而是"各司其职"1.3 7项对比任务一览二、测试方法论2.1 测试环境与素材2.2 7项能力权重…

2026/10/24 6:20:25 阅读更多 →
AI Agent上下文压缩技术:解决长对话记忆过载的工程实践

AI Agent上下文压缩技术:解决长对话记忆过载的工程实践

1. 项目概述:当Agent的记忆不堪重负 最近在折腾几个工具型Agent项目,比如让它们帮我处理长文档摘要、分析多轮对话日志,或者作为客服助手处理复杂的用户咨询。一个绕不开的痛点很快就浮现出来:随着对话轮次增加,上下文…

2026/10/23 21:53:58 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/25 11:19:54 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/24 17:47:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/24 18:34:36 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/25 10:02:42 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/25 3:12:30 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/24 21:09:59 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 10:02:43 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/24 11:09:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 7:47:32 阅读更多 →