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

力扣 零钱兑换

完全背包,动态规划例题。

题目

这题跟完全背包跟完全平方数有点相似。在完全平方数中,用一个dp数组去取得目标金额的每一步的最优,当前状态可能来自上一个dp,也有可能比上一个dp更小,因此往回退一步加一做比较。在完全背包中,遍历到的物品是放还是不放使得收益大。

public class Solution {public int coinChange(int[] coins, int amount) {int max = amount + 1;int[] dp = new int[amount + 1];Arrays.fill(dp, max);dp[0] = 0;//未达到amountfor (int i = 1; i <= amount; i++) {for (int j = 0; j < coins.length; j++) {if (coins[j] <= i) {dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);}}}return dp[amount] > amount ? -1 : dp[amount];//状态未转移,amount达不到,返回-1}
}

当然,从背包上看,也可以先进行遍历物品,再遍历体积,会减少一些执行次数。

时间复杂度:O(Sn),空间复杂度:O(S)。S为amount。

public class Solution {public int coinChange(int[] coins, int amount) {int max = amount + 1;int[] dp = new int[amount + 1];Arrays.fill(dp, max);dp[0] = 0;for (int coin : coins) {for (int j = coin; j <= amount; j++) {dp[j] = Math.min(dp[j], dp[j - coin] + 1);}}return dp[amount] > amount ? -1 : dp[amount];}
}

动态规划还是要找准状态值及状态转移方程,注意dp数组的值是到目标值的最优解,是用来实现每一步状态的。

http://www.lryc.cn/news/534611.html

相关文章:

  • C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割
  • 快速搭建 Elasticsearch 8 集群:零基础实战与升级注意事项
  • 基于扑克牌分发效果制作时的问题总结
  • 老榕树的Java专题:Redis 从入门到实践
  • 【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)
  • 在 Qt 开发中,可以将 QML 封装成库
  • 换电脑了如何快速导出vscode里的插件
  • 点大商城V2-2.6.6源码全开源uniapp +搭建教程
  • 9 Pydantic复杂数据结构的处理
  • springboot+redis实现将树形结构存储到redis
  • 6、使用one-api管理统一管理大模型,并开始使用本地大模型
  • Windows安装Lyx
  • 一文讲透大模型部署工具ollama--结合本地化部署deepseek实战
  • 网络防御高级
  • 使用PyCharm进行Django项目开发环境搭建
  • 如何定义“破坏环境”
  • 现代前端开发的演进与未来趋势:从工具革新到技术突破
  • 活动预告 |【Part1】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识
  • idea Ai工具通义灵码,Copilot我的使用方法以及比较
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter8-对象、类与面向对象编程
  • 介绍下SpringBoot常用的依赖项
  • 深度解析策略模式:从理论到企业级实战应用
  • 【Linux】深入理解linux权限
  • C++STL(六)——list模拟
  • 网络安全与AI:数字经济发展双引擎
  • WPS接入DeepSeek模型
  • 深度学习之神经网络框架搭建及模型优化
  • 采用分步式无线控制架构实现水池液位自动化管理
  • OpenEuler学习笔记(二十三):在OpenEuler上部署开源MES系统
  • SpringSecurity:授权服务器与客户端应用(入门案例)