代码随想录算法训练营第四十四天|完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ

news2025/1/16 16:02:17

 完全背包

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。

完全背包和01背包问题唯一不同的地方就是,每种物品有无限件

01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次
而完全背包的物品是可以添加多次的,所以要从小到大去遍历。

完全背包模板:

void test_CompletePack() {
    vector<int> weight = {1, 3, 4};
    vector<int> value = {15, 20, 30};
    int bagWeight = 4;
    vector<int> dp(bagWeight + 1, 0);
    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]);
        }
    }
    cout << dp[bagWeight] << endl;
}
int main() {
    test_CompletePack();
}

其实对于完全背包,先遍历物品或先遍历背包容量都是可以的
因为遍历物品在外层循环,遍历背包容量在内层循环,状态如图:

 遍历背包容量在外层循环,遍历物品在内层循环,状态如图:

完全背包中,两个for循环的先后循序,都不影响计算dp[j]所需要的值(这个值就是下标j之前所对应的dp[j])

零钱兑换II

题目链接:力扣

 这题和01背包中的“目标和”很像,都问的是:装满背包一共有多少种方法?
(要求凑成总金额的物品组合个数)
注意:组合不强调元素之间的顺序,排列强调元素之间的顺序

  1. 确定dp数组以及下标的含义
    dp[j]:凑成总金额j的货币组合数为dp[j]
  2. 确定递推公式
    dp[j] 就是所有的dp[j - coins[i]](考虑coins[i]的情况)相加。
    递推公式:dp[j] += dp[j - coins[i]]; (其实是和“目标和”那道题的递推公式是一样的)
  3. dp数组如何初始化
    dp[0]=1;若将其赋值为0的话,则无法进行递推,后面都将是0
  4. 确定遍历顺序
    纯完全背包求得装满背包的最大价值是多少,和凑成总和的元素有没有顺序没关系,即:有顺序也行,没有顺序也行!
    而本题要求凑成总和的组合数,元素之间明确要求没有顺序。
    本题是求凑出来的方案个数,且每个方案个数是为组合数。
    应先外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)
    这种遍历顺序中dp[j]里计算的才是组合数
    若交换了遍历顺序,则dp[j]里算出来的就是排列数
  5. 举例推导dp数组
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];

    }
};

 组合总和 Ⅳ 

题目链接:力扣

这题和上题的区别在于, 他虽然名字是组合总数,其实他也强调了元素的顺序,即排列。
所以这题和上题唯一的不同在于遍历顺序

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {

        vector<int>dp(target+1,0);
        dp[0] = 1;

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

        return dp[target];        

    }
};

C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]。

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

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

相关文章

【数据结构】顺序表,链表

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启 javaEE 的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 前言 顺序表 ArrayList ArrayLi…

K8S存储值之PV和PVC

1. 概念&#xff1a; 1.1. PersistentVolume (PV)&#xff1a; 是由管理员设置的存储&#xff0c;它是群集的一部分。就像节点是集群中的资源一样&#xff0c;PV也是集群中的资源。PV是Volume之类的卷插件&#xff0c;但具有独立于使用PV的Pod的生命周期。此API对象包含存储实…

数字图像处理-图像复原与重建

文章目录 一、图像退化/复原过程的模型二、噪声模型2.1噪声的空间和频率特性2.2一些重要的噪声概率密度函数2.2.1高斯噪声2.2.2瑞利噪声2.2.3爱尔兰&#xff08;伽马&#xff09;噪声2.2.4指数噪声2.2.5均匀噪声2.2.6脉冲&#xff08;椒盐&#xff09;噪声 2.3周期噪声 三、只存…

【ABAP】数据类型(四)「类型组TYPE-POOL」

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较…

基于电容电流前馈与电网电压全前馈的三相LCL并网逆变器谐波抑制MATLAB仿真

基于电容电流前馈&#xff0b;电网电压全前馈的三相并网逆变器谐波抑制MATLAB仿真资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87940934模型简介&#xff1a; 测试环境为MATLAB2021b 一共包含两个模型&#xff1a;一个是传统无改进模型&#xff0c;一个…

chatgpt赋能python:Python画运动轨迹:探索世界的足迹

Python画运动轨迹&#xff1a;探索世界的足迹 作为一门快速发展的编程语言&#xff0c;Python在数据分析、机器学习、Web开发等多个领域中发挥着举足轻重的作用。其中&#xff0c;画运动轨迹是Python可视化库中较为常见的应用之一。本文将介绍使用Python画运动轨迹的方法&…

chatgpt赋能python:Python画点函数:如何绘制并掌握基础图形?

Python画点函数&#xff1a;如何绘制并掌握基础图形&#xff1f; Python是一个极为强大的编程语言&#xff0c;它可以用来编写各种应用程序&#xff0c;包括绘图。绘图是Python的重要特性之一&#xff0c;它提供了各种绘图函数&#xff0c;包括画点函数。Python的画点函数是一…

chatgpt赋能python:Python的frozenset:一种不可变的集合类型

Python的frozenset&#xff1a;一种不可变的集合类型 在Python中&#xff0c;集合是一种基本的数据类型。它们是无序的、可变的、且不允许重复的元素。但是&#xff0c;有时候我们需要一个不可变的集合&#xff0c;即一旦创建就不允许进行修改操作的集合。这就是frozenset的作…

【STM32 】芯片命名、内核、产品系列

文章目录 一、半导体公司介绍二、STM32 芯片2.1 芯片命名2.2 Cortex-M内核2.3 STM32 系列 一、半导体公司介绍 STM32是STMicroelectronics&#xff08;意法半导体&#xff09;公司的一系列32位微控制器&#xff0c;基于ARM Cortex-M内核&#xff0c;具有高性能、低功耗、丰富的…

【软件设计师暴击考点】软件工程知识高频考点【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

chatgpt赋能python:Python的Pipe:快速高效的数据传输工具

Python的Pipe&#xff1a;快速高效的数据传输工具 如果你是一名Python工程师&#xff0c;那么你一定会非常了解数据传输的重要性。Python的Pipe就是一种可以让你快速高效地传输数据的工具。在本文中&#xff0c;我们将对Python的Pipe进行详细介绍&#xff0c;探讨它的优点、如…

Linux命令(35)之shutdown

Linux命令之shutdown 1.shutdown介绍 linux命令shutdown主要用来重启、关闭服务器。 2.shutdown用法 shutdown [参数] shutdown常用参数 参数说明-c取消即将执行的关机程序-k 仅仅向每个登录用户发出警告信息&#xff0c;并不真正关机 -h关机(halt)-H关机(halt)-P关机(powe…

chatgpt赋能python:Python中的figsize:使用和优化

Python中的figsize&#xff1a;使用和优化 在数据分析和可视化领域&#xff0c;Python被广泛使用。matplotlib是一个流行的Python可视化库&#xff0c;用于创建各种类型的图形。在matplotlib中&#xff0c;figsize是一个非常有用的参数&#xff0c;可以控制图形的大小。 什么…

3、数据库操作语句:MySql函数

1、数学函数 1&#xff09;单行函数可以嵌套 例如&#xff1a;select truncate(round(123.456,2),0) from dual;//结果&#xff1a;123 2&#xff09;三角函数 举例&#xff1a; ATAN2(M,N)函数返回两个参数的反正切值。 与ATAN(X)函数相比&#xff0c;ATAN2(M,N)需要两个参…

git图形化提交报错“error: cannot spawn C:\Program Files (x86)\Git\bin\ssh.exe: ”

一&#xff0c;问题现象 gitTortoise在push代码到服务器的时候出现如下错误&#xff1a; 报错信息&#xff1a; git.exe push --all --progress "origin" error: cannot spawn C:\Program Files (x86)\Git\bin\ssh.exe: No such file or directory fatal: unable t…

blfs:为lfs虚拟机增加桌面03

编译安装Qt5.15 我比较好奇&#xff0c;当前只安装了twm&#xff08;X.org提供的简单的窗口管理器&#xff09;&#xff0c;这个时候Qt的界面是怎么样的一个呈现。 Qt5.15安装 required和recommanded必装&#xff0c;optional中涉及到runtime的建议安装。其他的看需要再安装。…

彻底解决Springboot中路径参数带 (%2F)的问题

彻底解决Springboot中路径参数带/(%2F)的问题 背景 前两天突然出现了一个线上问题&#xff0c;有同事反应我提供的接口报400的错误。接口路径如下 PATCH /v1/basic/owners/{owner_code}/skus/{sku}&#xff0c;经过排查发现是sku参数中有/因此springboot转义后直接报错了。由…

chatgpt赋能python:Python画的图是放置在什么位置合适?

Python画的图是放置在什么位置合适&#xff1f; Python作为一门流行的编程语言&#xff0c;已经被广泛应用于数据科学和机器学习的领域。在这些领域&#xff0c;数据可视化是一个重要的环节。Python提供了许多强大的可视化工具&#xff0c;可以帮助我们更好地了解和分析数据。…

chatgpt赋能python:Python画图设置背景颜色

Python画图设置背景颜色 在Python中使用Matplotlib和Seaborn等库来生成数据可视化图表非常方便。但是&#xff0c;这些图表默认使用白色背景。有时&#xff0c;我们需要在制作图表时更改背景颜色以匹配我们的主题或品牌标识。本文将介绍如何在Matplotlib和Seaborn中设置不同的…

flutter开发 - 七牛云上传sdk插件qiniu_flutter_sdk使用

flutter七牛云上传sdk插件qiniu_flutter_sdk使用 最近在拆分代码&#xff0c;将上传组件设置成插件&#xff0c;下面记录下实现过程。 一、创建flutter_plugin上传插件 这里Android Studio使用创建plugin 填写一下信息 Project nameProject locationDescriptionProject typ…