【代码随想录|完全背包问题】

518.零钱兑换||

题目链接:518. 零钱兑换 II - 力扣(LeetCode)
这里求的是组合数,就是不强调元素排列的顺序,211和121是同一个数那种,要先遍历物品,这样的话我算出来的每个值才是按顺序121,不会出现211的情况,而我先遍历背包的话,我要达到这个背包数,就要不断尝试

  1、确定dp数组以及下标的含义

dp[j]:凑成总金额j的货币组合数为dp[j]

  2、确定递推公式

我觉得这里的递推公式是这么来的,比如拿dp[5]来说

一、第一次放物品,想要装满,可以往里面放dp[4],因为1+dp[4](这时候值为1)刚好装满

二、第二次放物品,想要装满,可以往里面放dp[3],因为2+dp[3](这时候值为2)刚好装满

三、第三次放物品,想要装满,可以往里面放dp[0],因为5+dp[0](这时候值为1)刚好装满

那我们一共有多少种方法可以到dp[5]呢,就是dp[4]+dp[3]+dp[0](1+2+1)为4 刚好装满

就是这里的dp[5]如果只看放入第三个物品单从一维来的话5+dp[0]你怎么看dp[0]都是不可能等于4的,所以如果从二维来看,这里的递推公式其实是在纵向不断累加我要达到该值的方法。

3、dp数组如何初始化

dp[0]为1,因为如果dp[0] = 0 的话,后面所有推导出来的值都是0了。

4、确定遍历顺序

这里先遍历物品再遍历背包得到是组合数,就是121和112是同一个

先遍历背包再遍历物品得到的时排序数,121和112是两个数

dp[j]一定是来自于外层上一次的结果,而外层上一次的结果一定是来源于上一个物品的dp数组,也就是只会出现【物品1,物品1,物品2】这种情况,而物品2不会出现在物品1之前,恰好对应组合问题; 而外层遍历背包内层遍历物品就不一样了,每一层的dp[j]都是在固定j的情况下,把物品从头开始遍历,所以dp[j]来自于上一层的结果,而上一层的结果又遍历了所有物品,所以这种遍历方式会出现【物品1,物品2,物品1】这种情况,恰好对应了排列问题

class Solution {
public:
    int change(int amount, vector<int>& coins) {
        vector<int> dp(amount+1,0);
        dp[0]=1;
        for(int i=0;i<coins.size();i++){
            for(int j=coins[i];j<=amount;j++){
                dp[j]+=dp[j-coins[i]];
            }
        }
        return dp[amount];
    }
};

总结: 

装满这个背包的最大价值是多少/能不能装满这个背包类的题,先遍历物品和先遍历背包没有影响

装满这个背包有多少种方法类的题,先遍历物品和后遍历背包是组合数,先遍历背包后遍历物品时排列数

377.组合总和|V

题目链接:377. 组合总和 Ⅳ - 力扣(LeetCode)

这道题跟上道题基本一样,就是这道题是排列遍历顺序,上一道是组合的遍历顺序

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        vector<int>dp(target+1,0);
        dp[0]=1;
        for(int i=0;i<=target;i++){
            for(int j=0;j<nums.size();j++){  
                if(i-nums[j]>=0)              
                dp[i]+=dp[i-nums[j]];//因为i是遍历背包,j是遍历物品
            }
        }
        return dp[target];
    }
};

70.爬楼梯

题目链接:57. 爬楼梯(第八期模拟笔试)

跟组合组合||差不多,有n个楼梯,每次最多走m个楼梯,那就是背包里的物品是[1,m],然后我排列的进行选择,选到target看有多少种方法
这里的背包物品是从1到m进行遍历的,所以递归公式里面的是dp[i]+=dp[i-j];

using namespace std;
#include<iostream>
#include<vector>
int main(){
    int n,m;//n是背包容量,m是物品
    cin>>n>>m;
    vector<int> dp(n+1,0);
    dp[0]=1;
    for(int i=0;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i-j>=0)
            dp[i]+=dp[i-j];
        }
    }
    cout<<dp[n]<<endl;
    return 0;
}

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

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

相关文章

一款汽车连接器(HSD(4+2))信号完整性仿真

下面是一款汽车连接器HSD(42) 的3D外形&#xff1a; 其爆炸图如下&#xff1a; 下面是Rosenboger同款产品的2D图&#xff1a; 其信号完整性参数如下&#xff1a; 下面介绍一下如何给上面的3D模型做信号完整性仿真。 在介绍仿真前先介绍一下上面的一些参数&#xff1a;上面的参数…

安卓/system/bin下命令中文说明(AI)

ATFWD-daemon&#xff1a;AT指令转发守护进程&#xff0c;用于将AT指令从应用层转发到调制解调器。 PktRspTest&#xff1a;数据包响应测试工具。 StoreKeybox&#xff1a;存储密钥盒工具&#xff0c;用于安全地存储加密密钥。 WifiLogger_app&#xff1a;WiFi日志记录应用&…

华为开源自研AI框架昇思MindSpore应用案例:ICNet用于实时的语义分割

ICNet用于实时的语义分割 ICNet 被广泛应用于实时的语义分割领域。它在处理图像数据时&#xff0c;能够以较高的效率进行语义分割操作&#xff0c;为相关领域的研究和实际应用提供了有力的支持。ICNet 的实时性使其在众多场景中都具有很大的优势&#xff0c;例如在视频处理、自…

docker-compose搭建sfpt服务器

1. 搭建 创建sftp目录&#xff0c;进入该目录创建docker-compose.yml文件内容如下&#xff1a; version: 3.7services:sftp:image: atmoz/sftpcontainer_name: sftpports:- "122:22"volumes:- ./sftp-data:/homeenvironment:SFTP_USERS: "liubei:liubei161:10…

跨域请求问题

跨域请求简介 跨域请求&#xff1a;通过一个域的JavaScript脚本和另外一个域的内容进行交互 域的信息&#xff1a;协议、域名、端口号 同域&#xff1a;当两个域的协议、域名、端口号均相同 如下所示&#xff1a; 同源【域】策略&#xff1a;在浏览器中存在一种安全策略就是…

AI发展新态势:从技术突破到安全隐忧

AI安全的新挑战 近期AI领域出现了令人担忧的新发现。根据最新研究,AI模型已经开始展现出策略性欺骗的倾向。具体表现在以下几个方面: 策略性欺骗行为的出现 在实验中发现,当研究人员试图让AI执行一些"反Anthropic"的操作时(如获取模型权限和外部服务器访问),模…

【学生管理系统】环境搭建

目录 1. 环境搭建 1.1 前端环境 1.2 后端环境 1.2.1 父项目 1.2.2 domain项目 1.2.3 gateway项目 1.3 数据库环境 1.3.1 用户数据库 1.3.2 班级数据库 1.3.3 学生数据库 1.3.4 课程数据库 1. 环境搭建 1.1 前端环境 项目名&#xff1a;nacos-nuxt-student-fore 创…

若依数据权限控制

效果 新建用户 表结构 sys_role_dept 这张表的存在。是为了实现数据权限自定义的功能 service层 mapper层 流程

vue源码分析(十)—— 生命周期

文章目录 前言一、关键方法 callHook二、详细的钩子函数说明1.beforeCreate和create2.beforeMount & mounted注意点组件&#xff08;非根组件&#xff09;的渲染节点&#xff08;1&#xff09;invokeInsertHook函数&#xff08;2&#xff09;insert方法&#xff08;3&#…

【运维】部署MKDocs

部署MKDocs obsidian 记录笔记&#xff0c;通过 mkdocs 私有化部署。 1 使用MKDocs创建笔记 创建仓库&#xff0c;安装 Material for MkDocs 和 mkdocs-minify-plugin mkdir tmp cd tmp git initpip install mkdocs-material pip install mkdocs-minify-pluginmkdocs new .2 …

深度学习——神经网络中前向传播、反向传播与梯度计算原理

一、前向传播 1.1 概念 神经网络的前向传播&#xff08;Forward Propagation&#xff09;就像是一个数据处理的流水线。从输入层开始&#xff0c;按照网络的层次结构&#xff0c;每一层的神经元接收上一层神经元的输出作为自己的输入&#xff0c;经过线性变换&#xff08;加权…

面试突击-JAVA集合类(持续更新...)

前言 这篇文档非常适合面试突击人群&#xff0c;java集合类是面试高频问点&#xff0c;阅读完此文章可以直接应对面试官一切问题&#xff0c;最终吊打面试官。 概览 Java 集合&#xff0c;也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&am…

Ps:创建数据驱动的图形 - 数据组

在 Photoshop 的“变量” Variables对话框中&#xff0c;可以为某一图层定义&#xff08;或关联&#xff09;变量并指定变量类型和变量值。 请参阅&#xff1a; 《Ps&#xff1a;创建数据驱动的图形 - 定义变量》 每个实例的变量值的集合构成一个数据组 Data Set。在相应的数据…

小猫可以吃面包吗?

在宠物饲养日益普及的当下&#xff0c;小猫的饮食健康成为众多铲屎官关注的焦点。其中&#xff0c;小猫是否可以吃面包这一问题引发了不少讨论。 从面包的成分来看&#xff0c;其主要原料是面粉、水、酵母和盐&#xff0c;部分还会添加糖、油脂、鸡蛋、牛奶等。面粉富含碳水化…

OSI七层模型和交换机

概念讲解 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互连&#xff09;七层模型是一种网络通信的参考模型&#xff0c;它将网络通信的功能分为七个层次&#xff0c;每个层次负责特定的任务。 七层模型记忆口诀&#xff1a;物&#xff08;物理层&#xf…

算法题(19):多数元素

审题&#xff1a; 数组不为空且一定存在众数。需要返回众数的数值 思路&#xff1a; 方法一&#xff1a;哈希映射 先用哈希映射去存储对应数据出现的次数&#xff0c;然后遍历找到众数并输出 当然也可以在第一次映射的过程中就维护一个出现次数最多的数据&#xff0c;这样子就可…

【Chrome】浏览器提示警告Chrome is moving towards a new experience

文章目录 前言一、如何去掉 前言 Chrome is moving towards a new experience that allows users to choose to browse without third-party cookies. 这是谷歌浏览器&#xff08;Chrome&#xff09;关于隐私策略更新相关的提示 提示&#xff1a;以下是本篇文章正文内容&…

低代码开源项目Joget的研究——基本概念和Joget7社区版应用

大纲 1. 基本概念1.1 Form1.1.1 Form1.1.1.1 概述1.1.1.2 主要特点和用途1.1.1.3 创建和使用 Form1.1.1.4 示例 1.1.2 Section1.1.2.1 概述1.1.2.2 主要特点和用途1.1.2.3 示例 1.1.3 Column1.1.4 Field1.1.5 示例 1.2 Datalist1.2.1 Datalist1.2.1.1 主要特点和用途1.2.1.2 创…

安装winserver2008R2虚拟机步骤

一、服务器系统介绍 1.1什么是服务器&#xff1f; 服务器英文名称为“Server”&#xff0c;指的是网络环境下为客户机(Client)提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务、电子…

在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题

00 两种可行方法分别是&#xff1a; 使用数组存储每一位数据并进行进位运算&#xff1a;通过将大数按位拆分成数组&#xff0c;然后实现逐位加法、进位等操作。使用符号变量进行计算&#xff1a;将数值分成低位和高位&#xff0c;分别用符号变量进行计算。 01&#xff1a;使用…