动态规划专练:力扣第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/8/8 8:20:24 阅读更多 →
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/8/8 8:20:24 阅读更多 →
AI Agent上下文压缩技术:解决长对话记忆过载的工程实践

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

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

2026/8/8 8:19:23 阅读更多 →

最新新闻

Element UI表格横向滚动条固定底部实现方案

Element UI表格横向滚动条固定底部实现方案

1. 问题场景:当表格“跑”出了屏幕 在后台管理系统、数据报表这类前端开发中,Element UI 的 el-table 组件绝对是高频选手。它功能强大,开箱即用,极大地提升了我们处理表格数据的效率。但不知道你有没有遇到过这样一个让人有点“…

2026/8/8 9:13:48 阅读更多 →
openGauss数据库安全架构与实战指南

openGauss数据库安全架构与实战指南

1. openGauss数据库安全架构全景解析在企业级数据库应用中,安全性始终是核心考量因素。作为国产数据库的代表作,openGauss通过"纵深防御"理念构建了四层安全防护体系:1.1 基础设施安全层这是整个安全架构的基石,包含&am…

2026/8/8 9:13:48 阅读更多 →
从零构建短视频AI自动化生成流水线:技术原理与Python实战

从零构建短视频AI自动化生成流水线:技术原理与Python实战

1. 这篇文章真正要解决的问题 如果你是一名开发者,尤其是对音视频处理、社交媒体内容生成或AI应用集成感兴趣的开发者,最近可能被一个听起来有点“怪”的词刷屏了——“短卡甩饼”。它不是一道菜,也不是网络黑话,而是一个在技术圈…

2026/8/8 9:13:48 阅读更多 →
AI驱动3D数字人舞蹈生成:从音乐到动作的完整技术实现

AI驱动3D数字人舞蹈生成:从音乐到动作的完整技术实现

最近,你是不是也刷到过那个“古风旗袍摇”的短视频?一个身着旗袍的虚拟形象,伴随着动感的音乐,跳出极具节奏感和力量感的舞蹈。它不像传统古风舞蹈那样柔美,反而充满现代街舞的“劲儿”,这种强烈的反差感瞬…

2026/8/8 9:13:48 阅读更多 →
电商结算系统优化:库存快照与分区表技术实践

电商结算系统优化:库存快照与分区表技术实践

1. 项目背景与核心需求 在电商、零售、仓储管理等业务场景中,结算报表是财务对账和业务运营的核心依据。传统结算方式往往面临两大痛点:一是库存数据实时变动导致结算时点数据不准确,二是海量历史数据查询性能低下影响报表生成效率。 我们团…

2026/8/8 9:13:48 阅读更多 →
微信网页版访问恢复方案:wechat-need-web浏览器扩展深度解析

微信网页版访问恢复方案:wechat-need-web浏览器扩展深度解析

微信网页版访问恢复方案:wechat-need-web浏览器扩展深度解析 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 在当今数字化工作环境中&…

2026/8/8 9:12:48 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →