力扣322. 零钱兑换(java语言实现 完全背包问题)

news2025/5/24 21:48:50

Problem: 322. 零钱兑换

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

该题目可以归纳为完全背包问题,最少需要多少物品能填满背包。该类问题大体思路如下

状态

int dp[ n n n][ w + 1 w + 1 w+1] (其中 n n n表示有 n n n个物品, w w w表示背包最大重量为 w w w),记录每个阶段可达重量对应的最少物品个数;

状态转移方程

(i, j) 这个状态可能从(i - 1, j),(i - 1, j - weight[i]), (i - 1, j - 2weight[i]),…(i - 1, j - kweight[i])转移过来(其中weight[i]表示物品的重量) dp[i][j] = Math.min(dp[i-1][j], dp[i-1][j-weight[i]] + 1, dp[i-1][j -2weight[i]] + 2, dp[i-1][j - kweight[i]] + k);

解题方法

1.定义一个int类型的二维数组dp[][]记录每个阶段可达数额对应的最少硬币个数(行数为coins数组的长度,列数为amount + 1);
2.初始化数组dp将每一个位置值设为整形数最大值(Integer.MAX_VALUE)
3.初始化dp[][]第一行状态(循环范围c从0~amount/coins[0],并且dp[0][c*coins[0]] = c)
4.从dp[][]的第一行起开始动态转移,每次计算当前剩余可凑的数值(int k = j / coins[i];),同时判断可用于转换的上一状态是否小于当前状态dp[i - 1][j - c * coins[i]] + c < dp[i][j]
5.返回dp数组中最后的状态

复杂度

时间复杂度:

O ( n ⋅ a m o u n t ⋅ k ) O(n \cdot amount \cdot k) O(namountk) 其中 n n n为coins数组的长度 a m o u n t amount amount为给定的数 k k k为当前剩余最大金额数

空间复杂度:

O ( n ⋅ a m o u n t ) O(n \cdot amount) O(namount)

Code

class Solution {
    /**
     * Returns the minimum number of coins for a given amount
     * (Complete knapsack problem)
     *
     * @param coins  Given array
     * @param amount Given number
     * @return int
     */
    public int coinChange(int[] coins, int amount) {
        int n = coins.length;
        //After deciding on the ith coin,
        // the minimum number of coins dp[i][j] is needed to make up the sum j.
        int[][] dp = new int[n][amount + 1];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j <= amount; ++j) {
                dp[i][j] = Integer.MAX_VALUE;
            }
        }
        //Initialize the state of the first row
        for (int c = 0; c <= amount / coins[0]; ++c) {
            dp[0][c * coins[0]] = c;
        }
        for (int i = 1; i < n; ++i) {
            for (int j = 0; j <= amount; ++j) {
                //The maximum number of remaining loads
                 
                for (int c = 0; c <= k; ++c) {
                    if (dp[i - 1][j - c * coins[i]] != Integer.MAX_VALUE &&
                            dp[i - 1][j - c * coins[i]] + c < dp[i][j]) {
                        dp[i][j] = dp[i - 1][j - c * coins[i]] + c;
                    }
                }
            }
        }
        if (dp[n - 1][amount] == Integer.MAX_VALUE) {
            return -1;
        }
        return dp[n - 1][amount];
    }
}

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

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

相关文章

Python常用模块之hashlib

常用模块 - hashlib模块 一、简介 Python的hashlib提供了常见的摘要算法&#xff0c;如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。 什么是摘要算法呢&#xff1f;摘要算法又称哈希算法、散列算法。它通过一个函数&#xff0c;把任意长度的数据转换为一个长度固定的…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户&#xff1a; 1.使用CREATE USER语创建…

URLDecoder: Illegal hex characters in escape (%) pattern - negative value

1、前提&#xff1a; 使用URLDecoder.decode(“字符串”“utf-8”)&#xff1b;进行解码出现上述问题 2、原因&#xff1a; 字符串的内容出现%后不是一个16进制的数&#xff08;即从0——FF&#xff09; 3、解决方法&#xff1a; 检查传入的字符看是否%后有不是16进制的数…

【python测验】数字游戏 取模数 数位dp

这题目看得人感觉要失去梦想…… 题目&#xff1a; 看不懂也做不出来&#xff0c;python方法未知&#xff0c;记录几个可供参考的帖子。 LightOJ 1068 Investigation 算法提高篇–动态规划&#xff08;八&#xff09;&#xff1a;数位DP&#xff08;3&#xff09;

Python处理音频

从video中抽取audio from moviepy.editor import VideoFileClip from pydub import AudioSegmentvideo_path /opt/audio/audios/video1.mp4 audio_path /opt/audio/audios/video1.wav # 提取的音频保存路径# 加载视频文件 video VideoFileClip(video_path)# 提取音频 audi…

多个微信的朋友圈如何高效管理?

大家都知道&#xff0c;在当今社交媒体盛行的时代&#xff0c;微信朋友圈已成为了我们交流和分享生活的重要平台。但是&#xff0c;对于那些同时管理多个微信号的人来说&#xff0c;如何高效省时地管理这些账号的朋友圈就成了一项挑战。 今天我将分享一个神奇的微信管理工具&a…

智能分析网关V4初始配置步骤大揭秘

众所周知&#xff0c;EasyCVR与智能分析网关V4相结合&#xff0c;打破了传统监控的桎梏&#xff0c;通过人工智能传统监控的方式&#xff0c;做到了网关与监控的完美融合。收到了很多用户的追捧&#xff0c;但很多用户在拿到网关后都不知道如何配置&#xff0c;本期小编就和大家…

【DevOps-02】Code编码阶段工具

一、简要说明 在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装安装GitLab配置GitLab登录账户二、Git安装 Git官网 Githttps://git-scm.com/

【Redux】自己动手实现redux和react-redux

1. React提供context的作用 在class组件的世界里&#xff0c;如果后代组件共享某些状态&#xff0c;比如主题色、语言键&#xff0c;则需要将这些状态提升到根组件&#xff0c;以props的方式从根组件向后代组件一层一层传递&#xff0c;这样则需要在每层写props.someData&#…

【模拟电路】非接触测电笔绘制、电子琴NE555

一、非接触测电笔原理图绘制 二、非接触测电笔PCB绘制 三、电子琴NE555制作过程及元器件选型 四、电子琴NE555原理图绘制 五、电子琴NE555PCB绘制 六、电子琴NE555最终效果 点击跳转 一、非接触测电笔原理图绘制 材料 电池 2032 电池底座 适用电池:CR2032 白色 C964762 NPN三…

2024年怎么提升学历?三大成人学历提升方式一次看懂!

2024年想提升到大专、本科学历该怎么做&#xff1f; 成人提升学历有自考、成考、开放大学三种途径。 不同的途径有不同的报名条件和拿证方式。 考生可以根据自己的实际情况选择适合自己的方式。 下面我们一起来看下&#xff0c;2024年怎么选适合自己的学历提升方式。 成人学…

数据结构【树篇】(二)

数据结构【树篇】(二&#xff09; 文章目录 数据结构【树篇】(二&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录树(一)、树的存储(二)、树和森林的遍历——并查集(三)、并查集的优化 结语 前言 为什么突然想学算法了&#xf…

构建异步高并发服务器:Netty与Spring Boot的完美结合

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书…

StarRocks 在小红书自助分析场景的应用与实践

作者&#xff1a;小红书 OLAP 研发负责人 王成 近两年 StarRocks 一直是小红书 OLAP 引擎体系里非常重要的部分&#xff0c;过去一年&#xff0c;小红书的 StarRocks 使用规模呈现出翻倍的增长速度&#xff0c;目前整体规模已经达到 30 个集群&#xff0c;CPU 规模已经达到了 3…

一文讲透怎样用SPSS做二项Logistic回归分析?结果如何解释?

推荐采用《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“7.4 二元Logistic回归分析” 的解答。 本节内容选自《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“7.4 二元Logi…

新手必看!STM32通用定时器-输入捕获!

一、用途与工作原理 用途&#xff1a;用于测量信号的参数&#xff0c;比如周期和频率。   工作原理&#xff1a;在输入捕获模式下&#xff0c;当捕获单元捕捉到外部信号的有效边沿(上升沿/下降 沿/双边沿)时&#xff0c;将计数器的当前值锁存到捕获/比较寄存器TIMx_CCR&#…

如何制定知识竞赛活动的竞赛规则

知识竞赛既然是知识的竞赛&#xff0c;就应该制定相应的细则或规则。竞赛规则一般应包括以下内容&#xff1a;竞赛编组、答题形式、每场题量、竞赛记分、违例处罚、观众答题、名次奖励及对参赛人员的要求。 1、竞赛编组 竞赛编组一般由抽签决定。在参赛人员较多、场次较多的…

JS数据类型转换注意事项【建议收藏】

ToPrimitive(obj, Number) 和 ToPrimitive(obj, String) 调用顺序不同在于: 区别在于调用 toString 方法和 valueOf 方法的顺序&#xff0c;区分这一点就行了。 ToPrimitive(obj, Number) > Number({}) 如果 obj 是基本类型&#xff0c;直接返回否则&#xff0c;调用 valueO…

简易机器学习笔记(九)LeNet实例 - 在眼疾识别数据集iChallenge-PM上的应用

前言 上一节大概讲了一下LeNet的内容&#xff0c;这一章就直接来用&#xff0c;实际上用一下LeNet来进行训练和分类试试。 调用的数据集&#xff1a; https://aistudio.baidu.com/datasetdetail/19065 说明&#xff1a; 如今近视已经成为困扰人们健康的一项全球性负担&…

【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济

毫无疑问&#xff0c;随着整个社会加速数字化转型&#xff0c;尤其是5G、人工智能、大数据等技术兴起&#xff0c;以及智慧医疗、智慧金融、智能制造等应用加速落地&#xff0c;算力网络在经济社会发展中扮演了愈来愈重要的角色&#xff0c;成为支撑数字经济蓬勃发展的“新引擎…