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

[LeetCode] 322、零钱兑换

题目描述

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。(你可以认为每种硬币的数量是无限的)

示例:

输入:coins=[1,2,5],amount=11输出:3解释:11=5+5+1

解题思路

大佬在这里有一个动态规划套路详解,吐血推荐。

动态规划遵循一套固定的流程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法

千万不要看不起暴力解,动态规划问题最困难的就是写出状态转移方程,即这个暴力解。优化方法无非是用备忘录或者 DP table,再无奥妙可言。

“动态规划”在本质上其实还是“搜索”,并且是“记忆化搜索”。“搜索”类问题,我们还是应该先画“递归树”分析:

由递归树我们可以分析得到,此问题有很多重复的子问题,所以我们应该考虑通过“记忆化搜索”或者“dp table”来解决。

ps:看到此题的第一反应是用贪心算法,但是贪心策略在这里并不适用,原因在于贪心算法解决此题时鼠目寸光。

参考代码

// 自底向上的动态规划classSolution{public:intcoinChange(vector<int>&coins,intamount){vector<vector<int>>dp(coins.size()+1,vector<int>(amount+1,INT_MAX));// 这里用 INT_MAX 代表凑不成// 初始化:dp[i][0] 表示用前 i 种硬币凑出金额 0 所需的最少硬币数,答案显然是 0(即一个硬币也不用)for(inti=0;i<=coins.size();i++){dp[i][0]=0;}for(inti=1;i<=coins.size();i++){for(intj=1;j<=amount;j++){dp[i][j]=dp[i-1][j];if(j-coins[i-1]>=0&&dp[i][j-coins[i-1]]!=INT_MAX){dp[i][j]=min(dp[i-1][j],dp[i][j-coins[i-1]]+1);// 完全背包}}}returndp[coins.size()][amount]==INT_MAX?-1:dp[coins.size()][amount];}};

问题:动态规划解法中,怎么体现“每种硬币的数量是无限的”?

上述代码可以优化成一维数据,这里暂时先不写了。

http://www.jsqmd.com/news/1071278/

相关文章:

  • AI Coding最佳实践:从RAG失效到OpenSpec可执行规范
  • Elastic Integrations与CI/CD集成:自动化监控配置的终极指南 [特殊字符]
  • MATLAB Timetable实战:列车时刻表数据分析与可视化
  • Excel单元格底层数据提取:Cell2Underlying工具实现与原理详解
  • 2026 AI编程环境安装指南:GPU、Metal与容器化部署实战
  • Hbase2.6.2集群部署
  • Lucky反向代理5个关键配置:如何构建高性能Web网关与安全防护体系
  • DeepSeek-V4-Flash:财经信息处理范式迁移与本地化SEO/GEO实战
  • 揭秘GeekServer核心:Actor模型如何解决游戏服务器并发难题?完整技术解析
  • Graeffe根平方法:从原理到MATLAB实现,解决多项式求根数值难题
  • vSphere 9.0.2.0安全与存储重构:SSL证书策略化与USB NVMe直通
  • MATLAB竞赛与招聘会:技术能力变现与职业发展全攻略
  • Kimi K2.5生产级API接入:性能实测、成本陷阱与鲁棒性实践
  • Fab库源码深度剖析:从设计模式到实现原理
  • MPC8308处理器DUART与eSDHC接口详解及硬件设计要点
  • Simulink模型配置为AUTOSAR软件组件的完整指南
  • 如何快速掌握Deep Learning Illustrated中的循环神经网络(RNN)与GRU架构:面向初学者的完整指南
  • TensorFlow Data Validation 与TFX集成:构建端到端机器学习流水线的最佳实践
  • Arduino与ThingSpeak物联网数据上传实战:从传感器到云端
  • 系统化交易技术架构深度解析:从理论到实践的最佳实践指南
  • Proteus 8.17安装失败根源与稳定激活方案
  • Google Gemini Advanced免费订阅资格校验全指南
  • RisuAI:3步开启你的AI角色扮演创作之旅
  • 轻量级混合方法实现高效点击诱饵检测
  • Django-Templated-Email测试与调试:确保邮件发送万无一失的终极指南 [特殊字符]
  • 【信息科学与工程学】计算机科学与自动化——第三篇 计算理论基础05 计算数论01
  • Rocky Linux 9 OpenSSH漏洞CVE-2024-6387修复实战与安全加固指南
  • Grok V9-Medium+Cursor:重构AI编程工作流的本地化实践
  • Continuity Activation Tool实战指南:全面解锁Mac接力功能的专业方案
  • Claude Code技能开发:Superpowers与GSD双框架实操指南