算法训练营Day38

#Java #完全背包 #动态规划                            

Feeling and experiences:

动态规划:完全背包理论基础

之前学习的是01背包,其特点在于:每个物品都只能取一个

而完全背包则是可以一个物品取多个。

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

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

零钱兑换II:力扣题目链接

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0

假设每一种面额的硬币有无限个。 

题目数据保证结果符合 32 位带符号整数。

示例 1:

输入:amount = 5, coins = [1, 2, 5]
输出:4
解释:有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1

该题理解递推公式:

dp[j] += dp[j-coins[i]];

• 外循环遍历每一种硬币。
• 内循环从该硬币面值开始,直到目标金额。
• 更新dp[j]的值:对于每个j,dp[j]增加dp[j - coins[i]]的值。这表示,如果你已经知道了组成金额j - coins[i]的方法数,那么只需加上当前硬币coins[i],就可以组成金额j。

(注意这里 内外 循环的区别
 

class Solution {public int change(int amount, int[] coins) {//因为硬币的数量可以随意取//这是一个完全背包问题//创建dp数组 ,dp数组的含义:装满容量为 j 的背包 有dp[j]种方法int []dp = new int[amount+1];//怎么递推出来的?//dp[j] += dp[j - coins[i]]; //初始化dp数组:dp[0] = 1; //这里要初始化为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];}
}

乍一看,和01背包问题很像

以下是硬币只能取一次的代码:

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 = amount; j >= coins[i]; j--) {dp[j] += dp[j - coins[i]];}}return dp[amount];}
}

这里的关键变化是内循环的遍历方向。

由于每种硬币只能使用一次,所以我们必须从后向前更新 dp 数组。这样,当计算 dp[j] 时,dp[j - coins[i]] 还没有被当前的硬币影响,确保了每种硬币只被使用一次。

组合总和 Ⅳ:力扣题目链接

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

示例 1:

输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。

这道题就相当于是 零钱兑换II 求组合 变成了求排列

class Solution {public int combinationSum4(int[] nums, int target) {//关键:不同 序列被视作 不同组合//创建dp数组 含义: 得到target 有dp[target]种方法int []dp = new int[target+1];//递推公式://dp[i] += dp[i-nums[j]];//初始化dp数组:dp[0] = 1;for(int i =0;i<=target;i++){for(int j =0;j<nums.length;j++){if(i >= nums[j]){dp[i] += dp[i-nums[j]];}}}return dp[target];}
}
比如:【1,3】 【3,1】 算两种不同的结果!

滟滟随波千万里,

何处春江无月明!

Fighting!
 

 

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

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

相关文章

高级分布式系统-第6讲 分布式系统的容错性--故障/错误/失效/异常

分布式系统容错性的概念 分布式系统的容错性&#xff1a; 当发生故障时&#xff0c; 分布式系统应当在进行恢复的同时继续以可接受的方式进行操作&#xff0c; 并且可以从部分失效中自动恢复&#xff0c; 且不会严重影响整体性能。 具体包括以下4个方面的内容&#xff1a; 可…

如何将后端带过来的字符串通过‘,’号作为判断依据,分割字符串然后生成数组

在实际开发工程中我们会遇到我们调用后端接口获取图片、文件、视频甚至选择的对象时&#xff0c;如果是这样的&#xff1a; 这种数据类型如果想渲染在html中的话就会很麻烦&#xff0c;我们可以通过","号为切割点将它放入数组中&#xff0c;通过列表进行渲染 由于实…

vue使用elementui select下拉库组件鼠标hover出现下拉框

mounted 生命周期里去监听 鼠标进入和鼠标移出事件 this.$refs.mySelect.addEventListener(mouseenter, function () {this.querySelector(.selectel .el-select-dropdown).style.display block})this.$refs.mySelect.addEventListener(mouseleave, function () {this.querySe…

STM32入门教程-2023版【3-4】总结GPIO使用方法

三、总结GPIO使用方法 总体上来说是比较简单的 首先初始化时钟&#xff0c;然后定义结构体&#xff0c;赋值结构体 GPIO_Mode可以选择那8种输入输出模式&#xff0c;GPIO_Pin选择引脚&#xff0c;可以用按位或的方式同时选中多个引脚,GPIO_Speed选择输出速度&#xff0c;最后使…

全网最全持续集成接口自动化-jmeter+ant+jenkins

ant 批量执行Jmeter 一、环境准备 1、JDK环境&#xff1a;Java Downloads | Oracle 2、ANT环境&#xff1a;Apache Ant - Binary Distributions 3、Jmeter&#xff1a;Apache JMeter - Download Apache JMeter 4、将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant…

c语言中scanf的用法

通过键盘&#xff0c;将数据输入到变量中 #include<stdio.h>int main(void){int a;scanf("%d",&a);printf("%d",a);return 0; }scanf("%d",&a);: 从键盘输入数据的时候&#xff0c;输入的是一个个字符而不是数字等与已经定义好的…

【开发篇】一、内存泄漏的分析工具

文章目录 1、内存泄漏2、解决内存泄漏3、工具一&#xff1a;Top4、工具二&#xff1a;VisualVM5、工具三&#xff1a;阿尔萨斯Arthas6、工具四&#xff1a;Promethus Grafana7、图像分析 1、内存泄漏 一个对象不再使用后&#xff0c;&#xff08;因其从GC Root仍有引用链可达…

2023下半年软考证书什么时候发放?怎么领取?

已经确定领取时间的地区&#xff1a; 广东&#xff1a; 电子版&#xff1a;2024年1月8日上线 纸质版&#xff1a;预计24年2月开始 重庆&#xff1a; 邮寄申领&#xff1a;2024年1月15日0:00-3月1日23:00 现场领取&#xff1a;2024年1月15日-2月7日 贵州&#xff1a; 邮…

vue Element Plus Cascader级联选择器点击标签选中复选框

element-plus原功能 element-plus的Cascader级联选择器点击标签时是不会选中复选框的&#xff0c;我们想要实现点击标签时也能选中复选框这个效果&#xff0c;那么就要用到一些原生的方法 实现效果 mounted() {// Cascader 级联选择器: 点击文本就让它自动点击前面的input就可…

PPT自动化处理

python-pptx模块 可以创建、修改PPT(.pptx)文件非Python标准模块&#xff0c;需要单独安装 在线安装方式 pip install python-pptx 读取slide幻灯片 .slides 获取shape形状 slide.shapes 判断一个shape中是否存在文字 shape.has_text_frame 获取文字框 shape.text_f…

记录汇川:H5U与Fctory IO测试10

主程序&#xff1a; 子程序&#xff1a; IO映射 子程序&#xff1a; 自动程序 Fctory IO配置&#xff1a; HMI配置&#xff1a; 实际动作如下&#xff1a; Fctory IO测试10

Java Websocket发送文件给Vue客户端接收并上传,实现检测U盘插入并将指定文件上传到服务器功能

应用环境&#xff1a; B/S架构 需求描述&#xff1a; 1、判断U盘接入 2、扫描U盘指定文件&#xff0c;将满足条件的文件发送给服务器 解决思路&#xff1a; 1、因为bs架构&#xff0c;无法获取本机资源&#xff0c;计划在U盘所在服务器部署websocket服务 2、websocket服务扫描u…

C# 快速模指数运算 快速求余运算

此方法解决这样一个问题&#xff0c;就是a^b mod m 的余数是多少。 如果直接计算a^b&#xff0c;方次很大的时候&#xff0c;会溢出&#xff0c;而且时间很长。 当然指数很小的时候直接用自带的Math函数就行&#xff0c;如果指数很大的时候&#xff0c;可以用以下的方法。 原…

提升源代码安全性的C#和Java深度混淆工具——IpaGuard

保护C#|JAVA源代码的深度混淆工具——IpaGuard 摘要 Ipa Guard是一款功能强大的IPA混淆工具&#xff0c;通过对iOS IPA文件进行混淆加密&#xff0c;保护其代码、资源和配置文件&#xff0c;降低破解反编译难度。本文将介绍Ipa Guard的深度混淆技术&#xff0c;包括逻辑混淆、…

白学的小知识[node.ji三大模块]

1. http模块&#xff1a;http模块是Node.js官方提供的用来创建HTTP服务器和客户端的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对HTTP通信的需求。例如&#xff0c;可以使用http模块创建一个简单的HTTP服务器&#xff0c;监听指定的端口&#xff0c;并处理请求…

世微AP5125 输入14-80V 输出12V5A LED灯降压恒流电源驱动方案 SOT23-6

这是一款60WLED驱动方案,线路图BOM表如下 ​ 祥单表&#xff1a; 实物图&#xff1a; 产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器&#xff0c;适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 …

【Spring Boot】application 配置文件(2)

server.servlet.session.timeout1800 spring.jackson.time-zoneGMT8 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss server.servlet.session.timeout1800 定义了 HTTP 会话的超时时间&#xff0c;单位是秒&#xff0c;在此设置中&#xff0c;会话的超时时间被设置为 1800秒 即…

element + table 行列合并

如图&#xff0c;实现通过判断数据&#xff0c;动态的合并列数据 <template><div class"merge-cell"><el-table:data"tableData":span-method"objectSpanMethod"borderstyle"width: 100%; margin-top: 20px"><e…

thinkadmin笔记

Db::name(huanggou)->where(id,$arra[dashou_id])->inc(num_read