【6.01 代随_44day】 完全背包、零钱兑换 II、组合总和 Ⅳ

news2024/10/6 2:00:53

完全背包、零钱兑换 II、组合总和 Ⅳ

  • 完全背包
    • 1.方法
      • 图解步骤
  • 零钱兑换 II
    • 1.方法
      • 图解步骤
      • 代码
  • 组合总和 Ⅳ
      • 图解步骤
      • 代码


完全背包

讲解连接:完全背包

1.方法

首先再回顾一下01背包的核心代码

for(int i = 0; i < weight.size(); i++) { // 遍历物品
    for(int j = bagWeight; j >= weight[i]; j--) { // 遍历背包容量
        dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
    }
}

我们知道01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。

而完全背包的物品是可以添加多次的,所以要从小到大去遍历,即:

// 先遍历物品,再遍历背包
for(int i = 0; i < weight.size(); i++) { // 遍历物品
    for(int j = weight[i]; j <= bagWeight ; j++) { // 遍历背包容量
        dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

    }
}

因为可以重复使用物品

在完全背包中,对于一维dp数组来说,其实两个for循环嵌套顺序是无所谓的!

先遍历背包在遍历物品,代码如下:

// 先遍历背包,再遍历物品
for(int j = 0; j <= bagWeight; j++) { // 遍历背包容量
    for(int i = 0; i < weight.size(); i++) { // 遍历物品
        if (j - weight[i] >= 0) dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
    }
    cout << endl;
}

图解步骤

遍历物品在外层循环,遍历背包容量在内层循环,状态如图:
在这里插入图片描述

遍历背包容量在外层循环,遍历物品在内层循环,状态如图:
在这里插入图片描述

最后,又可以出一道面试题了,就是纯完全背包,要求先用二维dp数组实现,然后再用一维dp数组实现,最后再问,两个for循环的先后是否可以颠倒?为什么? 这个简单的完全背包问题,估计就可以难住不少候选人了。



零钱兑换 II

力扣连接:518. 零钱兑换 II(中等)

1.方法

一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。

图解步骤

在这里插入图片描述

关键点

在求装满背包有几种方案的时候,遍历顺序是非常关键的。

  • 如果求组合数就是外层for循环遍历物品,内层for遍历背包。(无顺序要求)

  • 如果求排列数就是外层for遍历背包,内层for循环遍历物品。(有顺序要求)

代码

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];
    }
}


组合总和 Ⅳ

力扣连接:377. 组合总和 Ⅳ(中等)

排列数就是外层for遍历背包,内层for循环遍历物品(有顺序要求)

图解步骤

在这里插入图片描述

关键点

  • 求装满背包有几种方法,递归公式都是一样的,没有什么差别,但关键在于遍历顺序!

代码

class Solution {
    public int combinationSum4(int[] nums, int target) {
        int[] dp = new int[target+1];
        dp[0] = 1;

        for(int j=0;j<=target;j++){
            for(int i=0;i<nums.length;i++){
                if(j-nums[i]>=0){
                    dp[j] += dp[j-nums[i]];
                }
            }
        }

        return dp[target];
    }
}


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

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

相关文章

javaScript蓝桥杯---分阵营,比高低

目录 一、介绍二、准备三、目标四、代码五、答案 一、介绍 期末考试结束不久&#xff0c;辛勤的园丁们就将所有学生的考试成绩汇总完毕。不过现在遇到一个问题&#xff0c;那就是目前所有学生的考试数据均混杂在一起。这些数据结构如下&#xff1a; [{name: "潇然"…

安装Pygame库:在Python中创建游戏的第一步

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 安装Pygame库 方法一、在pycharm内部直接安装 方法二、通过pip直接安装 验证安装 前言 Pygame是一个功能强大的Python游戏开发库&#xff0c;它提…

MCU器件选型---主流厂商

MCU(Micro Controller Unit)中文名称为微控制单元&#xff0c;又称单片微型计算机(Single Chip Microcomputer)&#xff0c;是指随着大规模集成电路的出现及其发展&#xff0c;将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上&#xff0c;形成芯片级的计算机&…

SSRF漏洞、SQL注入、CSRF漏洞、XXE漏洞

SSRF漏洞 1.我理解的定义&#xff1a; 攻击者将伪造的服务器请求发给一个用户&#xff0c;用户接受后&#xff0c;攻击者利用该安全漏洞获得该用户的相关信息 2.原理&#xff1a; 3.场景&#xff1a; &#xff08;1&#xff09;分享 &#xff08;2&#xff09;转码 &#xff…

网络编程知识点总结(4)

sock服务端代码实现读写 前几章有具体介绍这几个函数&#xff0c;这里就简单罗列出来了 &#xff08;1&#xff09;socket()函数 int socket(int domain, int type, int protocol); &#xff08;2&#xff09;bind()函数: IP号端口号与相应描述字赋值函数 int bind(int soc…

shell编程之for循环

文章目录 shell编程之for循环一.for语句1.什么是for循环2.for语句的结构3.for语句中常用转义字符 二.for语句应用示例1.批量添加用户2.根据IP地址检查主机状态三.循环的次数1.循环次数的格式2.循环次数示例2.1求1-100的整数求和2.2 1-10的偶数求和 3.步长——seq3.1 1-10的偶的…

JavaScript对象详解(六)

JavaScript对象详解 1、对象的使用1.1、使用对象字面量法1.2、使用构造函数1.3、使用 Object.create() 2、继承与原型链2.1、基于原型链的继承2.1.1、继承属性2.1.2、继承方法 2.2、不同方式所生成的原型链2.2.1、使用语法结构2.2.2、使用构造器2.2.3、使用Object.create()2.2.…

【锂离子电池容量估算】电池单元总容量的递归近似加权总最小二乘估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

论文笔记--Deep contextualized word representations

论文笔记--Deep contextualized word representations 1. 文章简介2. 文章概括3 文章重点技术3.1 BiLM(Bidirectional Language Model)3.2 ELMo3.3 将ELMo用于NLP监督任务 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Deep contextualized word representations作者…

MMPose(openmmlab AI实战营二期第一节)

链接&#xff1a;人体关键点检测与MMPose_哔哩哔哩_bilibili 赶了个进度&#xff0c;实际上没听到&#xff0c;一个方向被浓缩成50分钟是有点难度。后续有需要再回顾吧 人体姿态估计&#xff1a;识别人体关键点坐标。模式识别任务&#xff0c;难点是始终在变化。以关键点连线…

chatgpt赋能python:如何使用Python匹配IP地址

如何使用Python匹配IP地址 如果你是一位网络管理员或是网络安全专家&#xff0c;那么你很可能需要经常处理IP地址。在一些情况下&#xff0c;你需要使用Python来自动化匹配或验证IP地址。在本文中&#xff0c;我们将介绍如何使用Python匹配IP地址。 IP地址的基础知识 在介绍…

地震segy数据高效读写库cigsegy在windows系统的编译

https://github.com/JintaoLee-Roger/cigsegy 一个读写 segy 格式地震数据的 python 和 c 工具。可以将 segy 格式文件读到内存或者直接转为二进制文件&#xff0c;也可以将一个 numpy 数据存储为segy格式的文件。 特点: 快&#xff0c;底层使用c实现可以在python中使用&…

皮卡丘XXE/URL重定向/SSRF

一.XXE 1.概述 XXE -"xml external entity injection" 既"xml外部实体注入漏洞"。 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题" 也就是说服务端接收和解析了来自用户端的xml数据,而又…

chatgpt赋能python:Python升级所有包:一步引导所有Python开发者升级你的Python环境

Python升级所有包&#xff1a;一步引导所有Python开发者升级你的Python环境 Python作为一种动态的编程语言&#xff0c;一直在不断发展和更新。每个Python版本都有自己的新功能和改进。因此&#xff0c;许多Python开发者在使用Python时都会尝试升级到最新的版本。但是&#xf…

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 1. 文章简介2. 文章概括3 文章重点技术3.1 Segment-Level Recurrence with State Reuse3.2 相对位置编码 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Transformer-XL: Attent…

Spring集合

目录 SpringSpring简介Spring概述Spring FrameworkSpring Framework特征 IOC1、IOC的思想(1)传统方式的获取资源(2)控制反转方式的获取资源(3)DI 2、IOC 容器的两种实现BeanFactoryApplicationContext 基于XML管理bean1.创建Maven2.引入依赖3.创建HelloWorld.Java类4.创建sprin…

【Java】单例设计模式-饿汉模式和懒汉模式

单例模式概念如何设计 饿汉模式懒汉模式分析造成线程不安全的原因解决方法 总结 单例模式 概念 单例是一种设计模式。单例指的是在全局范围内只有一个实例对象。比如在学习JDBC编码时使用的DataSource&#xff0c;定义了数据库的用户名&#xff0c;密码和连接串&#xff0c;定…

以太网交换机自学习和转发帧的流程

以太网交换机自学习和转发帧的流程 笔记来源&#xff1a; 湖科大教书匠&#xff1a;以太网交换机自学习和转发帧的流程 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 以太网交换机工作在数据链路层&#xff08;也包括物理层&#xff09; 以太网交…

大数据处理领域的经典框架:MapReduce详解与应用【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 MapReduce是一个经典的大数据处理框架&#xff0c;可以帮助我们高效地处理庞大的数据集。本文将介绍MapReduce的基本原理和实现方法&#xff0c;并给出一个简单的示例。 一、MapR…

文件上传漏洞、XSS漏洞、RCE漏洞

文件上传漏洞 1.定义&#xff1a;指用户上传了一个可执行的脚本文件&#xff08;常见头像&#xff0c;简历&#xff0c;资源&#xff0c;附件&#xff0c;编辑器&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。 2.所需条件 &#xff08;1&#xff0…