【力扣一刷】代码随想录day44(动态规划part6 - 背包问题专题: 完全背包理论基础、卡码网52、518. 零钱兑换 II、377. 组合总和 Ⅳ )

【完全背包理论基础】

与01背包问题的区别:

1、物品的可取次数:完全背包和01背包问题唯一不同的地方就是,01背包问题的每种物品只能取0次或1次,而完全背包问题的每种物品可以取无限次。

2、遍历滚动数组的顺序:01背包问题每件物品最多取一次,前面取了后面就不能取,所以要逆向遍历书包容量。而完全背包问题可以取无限次,因此是正向遍历,即使前面的书包容量放过物品 i 也可以。遍历第 i 个物品,书包容量为 j 时,不取第 i 个物品,则直接返回旧值dp[ j ],取第 i 个物品时,最大容量为 dp[j - weights[i]] + values[i],其中dp[j - weights[i]]的意思是留足够的空间给需要取的第 i 个物品,再从 0 ~ i 个(包括第 i 个)物品中取,背包容量为j - weights[i]能装下的最大容量。

【52. 携带研究材料(第七期模拟笔试)】

区别:遍历书包容量的时候,是正向遍历。

import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int V = sc.nextInt();int[] weights = new int[N];int[] values = new int[N];for (int i = 0; i < N; i++){weights[i] = sc.nextInt();values[i] = sc.nextInt();}int[] dp = new int[V+1];for (int i = 0; i < N; i++){for (int j = weights[i]; j < V + 1; j++){dp[j] = Math.max(dp[j], dp[j - weights[i]] + values[i]);}}System.out.println(dp[V]);}
}
  • 时间复杂度:O(N×V),N是物品的种类数,V是容量的大小
  • 空间复杂度:O(V)

【518. 零钱兑换 II】中等题

难点:

1、属于完全背包问题,需要正序遍历背包容量,从刚好能装第i个物品的背包容量开始遍历,即初始值 j = coins[i]。

2、要求的是恰好把背包装满的方案数,是放与不放的方案数的叠加,即dp[j] += dp[j - coins[i]];。

3、求的是组合数,外层for遍历的是物品,内层for遍历的是背包容量。

class Solution {public int change(int amount, int[] coins) {int dp[] = new int[amount + 1];dp[0] = 1; // 与题意理解不一样,但是设置amount=0,无论coins输入什么,输出都是1for (int i = 0; i < coins.length; i++){for (int j = coins[i]; j < amount + 1; j++){ // 完全背包:正序遍历dp[j] += dp[j - coins[i]]; // 求的是恰好装满背包的方案数,放和不放的叠加}}return dp[amount];}
}
  • 时间复杂度:O(M×N),M是硬币的种类数,N是amount的数值大小
  • 空间复杂度:O(N)

【377. 组合总和 Ⅳ】中等题

技巧:

1、判断:背包问题 or 完全背包问题?

  • 01背包问题 - 逆序遍历背包容量(不可重复取)
  • 完全背包问题 - 正序遍历背包容量(可重复取)

2、判断:组合数 or 排列数?

  • 求组合数 - 外层for循环遍历物品,内层for遍历背包容量。(物品顺序固定)
  • 求排列数 - 外层for遍历背包容量,内层for循环遍历物品。(物品顺序可变)

3、判断:求最大容量 or 方案数?

  • 求最大容量 dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);  (求最大)
  • 求方案数 dp[j] += dp[j-nums[i]]; (求叠加)

分析:

1、数组中的元素可以重复取,无限次数,属于完全背包问题,正序遍历背包容量

2、顺序不同的序列被视作不同的组合,相当于求的是排列数外层for循环遍历背包容量

3、求的是方案数,使用叠加的公式,记得设置初始值 dp[0] = 1,否则后面全是0。

class Solution {public int combinationSum4(int[] nums, int target) {int[] dp = new int[target + 1];dp[0] = 1;// 求排列数for (int i = 0; i < target + 1; i++){ // 外层for正序遍历书包容量for (int j = 0; j < nums.length; j++){ // 内层for遍历物品if (i >= nums[j]) dp[i] += dp[i - nums[j]]; // 书包容量足够(>=)的情况下才能考虑取}}return dp[target];}
}
  • 时间复杂度:O(M×N),M是target,N是nums数组的元素个数
  • 空间复杂度:O(M)

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

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

相关文章

软件开发标准流程与软件工程基本理论

软件开发标准流程与软件工程基本理论 一、需求分析 软件开发需要&#xff0c;自用户提出开始&#xff0c;商业合作确定&#xff08;规范化&#xff1a;软件开发项目合同&#xff09;&#xff0c;进入软件工程开始阶段&#xff1a;需求分析。 软件项目Team负责需求分析开发人员…

「C++ 内存管理篇 00」指针

目录 一、变量&#xff0c;变量名和指针 1. 什么是变量&#xff1f; 2. 变量名和指针 3. 使用指针获取数据 二、指针变量和数组变量 三、编译器对指针的等级有着严格的检查 四、指针的加减 1. 存放指针的变量的加减 2. 存放指针的变量的自增自减 3. 两个指针相减 一、变量&…

mybatis-plus 多张表查询

使用fill自动填充 @TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.DEFAULT) 自动填充类型 package com.example.mybatisplus.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObj…

AWS Cloudfront支持vuejs的html5模式

前提 1.vuejs项目使用html5模式&#xff1b;2.vuejs项目独立部署在一个s3桶中&#xff1b;3.vuejs项目独立使用一个AWS Cloudfront的CDN。 解决 只需要在Cloudfront中添加一个函数&#xff0c;大概规则就是如果从请求uri中提取到文件名&#xff0c;则表示需要访问s3&#xf…

【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹。 如果喜欢能否点个赞支持一下&#…

Docker之限制容器的资源使用

一、容器所用内存资源的限制 容器可使用的内存&#xff1a;物理内存和交换空间(Swap)。 1.1、用户内存限制 Docker默认没有设置内存限制。可以通过相关选项限制设置&#xff1a; -m(--memory)&#xff1a;设置容器可用的最大内存。该值最低为4MB。--memory-swap&#xff1a…

AMEYA360:佰维存储推出工规级宽温LPDDR4X芯片,高可靠性赋能工业与汽车电子应用

近日&#xff0c;佰维存储发布了工规级宽温LPDDR4X嵌入式存储芯片&#xff0c;该产品传输速率高达4266Mbps&#xff0c;容量覆盖2GB~8GB&#xff0c;可适应-40℃~95℃宽温工作环境;采用BGA 200 Ball封装&#xff0c;尺寸小至10.0x14.5x1.0mm&#xff0c;满足数据通信、轨道交通…

内网端口转发与代理

思路&#xff1a;渗透的前提是双方能够建立通信。目前无法和win7建立通信&#xff0c;但是拿到了windows2003的权限&#xff0c;所以可以在Windows2003主机上面建立节点&#xff0c;作为跳板机去访问到内网。 目前状态&#xff1a;控制win2003&#xff08;IP&#xff1a;192.1…

活动回放 | 如何进行全增量一体的异构数据库实时同步

以 AI领域为代表的新技术不断涌现&#xff0c;新的应用风口也逐渐清晰。为了加紧跟上技术发展的步伐&#xff0c;越来越多的企业开始着手&#xff0c;对仍以传统关系型数据库为主的应用后端进行现代化升级。 这就涉及到如何在不影响并保持现有业务系统正常运转的前提下&#xf…

软件测试产品交付包括哪些内容?

软件测试产品交付通常会包括以下内容: 1. 测试计划:详细的测试方案、测试范围、测试资源与时间安排等内容。 2. 测试用例:包括功能测试用例、性能测试用例、安全测试用例等各类测试用例。 3. 测试环境:包括硬件环境、软件环境、网络环境、数据环境等测试所需要的各种环境。 4. …

LeetCode 面试题 17.14 —— 最小 k 个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 第一种方法就是利用快速排序&#xff0c;第一次排序后&#xff0c;数组被划分为了左右两个区间 [ 0 , i ] , [ i 1 , a r r . s i z e ( ) − 1 ] [0, i], [i1, arr.size()-1]…

Docker入门指南:Docker容器的部署(一)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 当今软件开发领域中&#xff0c;Docker 成为了一种流行的容器化技术。Docker 可以帮助开发者将应用程序及其依赖项打包到一个独立且可移植的容器中&#xf…

云服务器IDC机房网络无法访问github如何解决?

到站长之家查询一下github的IP地址。 https://tool.chinaz.com/ 然后&#xff0c;编辑服务器hots文件。 vi /etc/hosts 打开后&#xff0c;在文件最后一行添加 ​20.205.243.166 github.com

Hibernate 元数据模型(MetaModel)提示类没有找到错误

在进行一次编译的时候&#xff0c;提示下面的错误信息&#xff1a; java: java.lang.ClassNotFoundException: org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor 问题和解决 如果你对 Hibernate 的元数据还是不非常了解的话&#xff0c;请参考文章&#xff1a; JPA 的…

汽车 - 降档补油超车

降档补油这事可是开手动档最大的乐趣之一&#xff0c;甚至还是进阶技巧“跟趾”的基础&#xff0c;所以建议开手动档的朋友一定要熟练掌握。 首先我们要明白手动档降档的意义&#xff0c;简单来说&#xff0c;发动机在转速高的时候能获得更好的加速力。这点相信开手动档的朋友都…

2002-2021年各地区平均受教育年限数据(分性别)(含原始数据+计算过程+计算结果)

2002-2021年各地区平均受教育年限数据&#xff08;分性别&#xff09;&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2002-2021年 2、来源&#xff1a;国家统计局、统计年鉴、各省年鉴 3、指标&#xff1a;行政区划代码、地区、年份、人均受教育年…

C++11,{}初始化,initializer_list,decltype,右值引用,类和对象的补充

c98是C标准委员会成立第一年的C标准&#xff0c;C的第一次更新是C03&#xff0c;但由于C03基本上是对C98缺陷的修正&#xff0c;所以一般把C98与C03合并起来&#xff0c;叫做C98/03&#xff1b; 后来原本C委员会更新的速度预计是5年更新一次&#xff0c;但由于C标准委员会的进…

Linux环境下的事件驱动力量:探索Libevent的高性能I/O架构

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《Linux环境下的事件驱动力量&#xff1a;探索Libevent的高性能I/O架构》&#xff0c;在这篇文章中&#xff0c;你将会学习到Libevent的高性能I/O原理以及应用&#xff0c;并且我会给出源码…

一竞技MSI:淘汰赛抽签结果出炉 BLG和T1同半区,TES首轮交手TL!

北京时间5月6日&#xff0c;MSI在今天进入短暂的休赛&#xff0c;在昨天结束的入围赛之后&#xff0c;PSG战队作为外卡赛区唯一的队伍进入到正赛&#xff0c;另外欧洲赛区的FNC战队也是击败GAM战队拿到正赛的资格。在比赛结束之后&#xff0c;也是进行了淘汰赛的胜败分组赛的抽…

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布&#xff0c;发布了 8B 和 70B 参数量的模型&#xff0c;lmdeploy团队对 Llama 3 部署进行了光速支持&#xff01;&#xff01;&#xff01; 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…