【代码随想录训练营】【Day44】第九章|动态规划|完全背包理论基础|518.零钱兑换 II|377.组合总和 Ⅳ

完全背包

01背包和完全背包的区别在于:

  • 01背包:元素都只能被放入一次背包中
  • 完全背包:元素可以被多次重复放入背包中

LeetCode上没有纯粹的完全背包的题目,想要了解完全背包的详细概念,可以查阅:《代码随想录》— 完全背包理论基础

后面的两道题目,都是完全背包的应用题。


零钱兑换 II

题目详细:LeetCode.518

详细的题解可以查阅:《代码随想录》— 零钱兑换II

Java解法(动态规划,完全背包):

class Solution {
    public int change(int amount, int[] coins) {
        int[] dp = new int[amount + 1];
        dp[0] = 1;
        // 完全背包问题中,元素可重复放入背包中,所以从前往后遍历
        for(int i = 0; i < coins.length; i++){
            for(int j = coins[i]; j <= amount; j++){
                dp[j] += dp[j - coins[i]];
            }
        }
        return dp[amount];
    }
}

组合总和 Ⅳ

题目详细:LeetCode.377

请注意,不同于上一题《零钱兑换 II》求的是组合数,在本题中,顺序不同的序列被视作不同的组合,所以这是一道求“排列数”的题目。

求组合数:顺序不同的序列被视作同一个的组合
求排列数:顺序不同的序列被视作不同的组合

详细的题解可以查阅:《代码随想录》— 组合总和 Ⅳ

这道题与上一题很详细,难点在于正确确定遍历顺序。

举例:如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面!

所以在这道题,需要将 target(背包)放在外循环,将 nums(物品)放在内循环,内循环从前到后遍历才行。

Java解法(动态规划,完全背包):

class Solution {
    public int combinationSum4(int[] nums, int target) {
        int[] dp = new int[target + 1];
        dp[0] = 1;
        //target(背包)放在外循环
        for(int i = 0; i <= target; i++){
        	// 将nums(物品)放在内循环, 内循环从前到后遍历。
            for(int j = 0; j < nums.length; j++){
                if(i >= nums[j])
                    dp[i] += dp[i - nums[j]];
            }
        }
        return dp[target];
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…

Linux操作系统基础的常用命令

1&#xff0c;Linux简介Linux是一种自由和开放源码的操作系统&#xff0c;存在着许多不同的Linux版本&#xff0c;但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中&#xff0c;比如手机、平板电脑、路由器、台式计算机。1.1Linux介绍Linux出现于1991年&#xff0c…

【数论】最大公约数、约数的个数与约数之和定理

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

python自动化办公(二)

上接python自动化办公&#xff08;一&#xff09; 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作 使用shutil库 shutil库也是Python标准库&#xff0c;它可以处理文件、文件夹、压缩包&#xff0c;能实现文件复制、移动、压缩、解压缩等功能。…

JAVA进阶 —— Stream流

目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据 2. Stream流的中间方法 3. Stream流的终结方法 四、 练习 1. 数据过滤 2. 数据操作 - 按年龄筛选 3. 数据操作 - 演员信息要求…

java八股文--java基础

java基础1.什么是面向对象&#xff0c;谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…

Tesla都使用什么编程语言?

作者 | 初光 出品 | 车端 备注 | 转载请阅读文中版权声明 知圈 | 进“汽车电子与AutoSAR开发”群&#xff0c;请加微“cloud2sunshine” 总目录链接>> AutoSAR入门和实战系列总目录 带着对更美好未来的愿景&#xff0c;特斯拉不仅成为有史以来最有价值的汽车公司&…

处理机调度与死锁-----计算机操作系统

一.简答题 1.高级调度和低级调度的主要任务是什么&#xff1f;为什么要引入中级调度 高级调度的主要任务&#xff1a;用于决定把外存上处于后备队列中的哪些作业调入内存&#xff0c;并为它们创建进程分配必要的资源&#xff0c;然后再将新创建的进程插入就绪队列上准备执行。 …

一眼看破五花八门的链表结构

文章目录&#x1f4d5;一&#xff1a;五花八门的链表结构&#x1f4d6;链表与数组的简单对比&#x1f4d6;单链表&#x1f4d6;循环链表&#x1f4d6;双向链表&#x1f4d5;二&#xff1a;链表VS数组性能大比拼&#x1f47f;最后说一句&#x1f431;‍&#x1f409;作者简介&am…

【Linux】进程的程序替换

文章目录1. 程序替换1.创建子进程的目的是什么&#xff1f;2.了解程序是如何进行替换的3. 程序替换的基本原理当创建进程的时候&#xff0c;先有进程数据结构&#xff0c;还是先加载代码和数据&#xff1f;程序替换是整体替换&#xff0c;不是局部替换execl 返回值4. 替换函数1…

使用new bing简易教程

申请new bing 首先先申请new bing然后等待通过&#xff0c;如下图 申请完&#xff0c;用edge浏览器&#xff0c;若有科学方法&#xff0c;就能在右上角的聊天进行向AI提问 使用插件来进行直接访问New Bing 在edge浏览器中安装一个插件&#xff0c;地址为&#xff1a;Mod…

操作系统(2.1)--进程的描述与控制

目录 一、前驱图和程序执行 1.前驱图 2.程序顺序执行 2.1 程序的顺序执行 2.2 程序顺序执行时的特征 3. 程序并发执行 3.1程序的并发执行 3.2 程序并发执行时的特征 一、前驱图和程序执行 1.前驱图 前趋图:是一个有向无循环图&#xff0c;用于描述进程之间执行的前后…

Spark的基本概念与架构

一、Spark简介 Spark 是一种与 Hadoop 相似的开源集群计算环境&#xff0c;但是两者之间还存在一些不同之处&#xff0c;这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越&#xff0c;换句话说&#xff0c;Spark 启用了内存分布数据集&#xff0c;除了能够提供交…

STM32F103R8T6 SPWM实现正弦波输出

前言 PWM合成正弦波&#xff0c;原理什么的不详细说了&#xff0c;概括一下就是 PWM有效面积的积分 正弦波的有效面积。PWM的频率越快&#xff0c;细分的越多&#xff0c;锯齿也就越不明显。 做法是&#xff1a;首先利用正弦波取点软件&#xff0c;取点1000个&#xff0c;生…

MySQL 约束介绍

目录 1、非空约束 2、 唯一约束 3、主键约束 4、自增长约束 5、外键约束 约束等级 6、默认值约束 1、非空约束 限定某个字段/某列的值不允许为空&#xff0c;空字符串’不等于NULL&#xff0c;0也不等于NULL CREATE TABLE 表名称( 字段名 数据类型, 字段名 数据类型 N…

Python如何打包exe文件?如何换成喜欢的图标?

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天又想来分享一个Python打包exe文件的教程&#xff01;&#xff01;这次是最强终极版~~~~ 在我们代码写好后&#xff0c;分享给不会编程的朋友时&#xff0c;总会遇到许许多多的的问题 这个时候&#xff0c;知道怎么…

【链表OJ题(五)】合并两个有序链表

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录链表OJ题(五)1. 合并…

jvm类与类加载

1.类加载过程&#xff1a; 首先要加载某个类一定是出于某种目的&#xff0c;比如要运行java程序&#xff0c;那么久必须加载主类才能运行其中的方法&#xff0c;所以一般在这些情况下&#xff0c;如果类没有被加载&#xff0c;就会自动被加载&#xff1a; 1.使用new创建对象时 …

【Unity小知识】Editor编写常用方法汇总

汇总一些Unity Editor开发的常用方法和实现方式&#xff0c;会持续更新。 添加自定义菜单栏方法 using UnityEngine; using UnityEditor;public class EditorTools : EditorWindow {[MenuItem("EditorTools/自定义的编辑器方法")]public static void CustomEditroFu…

Java——Map和Set的使用

目录 引言 Map的使用方法 Set说明 用map统计数组中每个数字出现的次数 将数据去重 找出第一个重复出现的数字 宝石与石头 复制带随机指针的链表 只出现一次的数字 引言 Map和Set是适合动态查找的集合容器&#xff0c;Map中存储的就是key-value的键值对&#xff0c;Set中只存储…
最新文章