当前位置: 首页 > article >正文

代码随想录算法训练营Day37 | 完全背包基础理论 518. 零钱兑换II 377. 组合总和Ⅳ 57. 爬楼梯(第八期模拟笔试)

完全背包基础理论

  • 不放物品i:背包容量为j,里面不放物品i的最大价值是dp[i - 1][j]。

  • 放物品i:背包空出物品i的容量后,背包容量为j - weight[i],dp[i][j - weight[i]] 为背包容量为j - weight[i]且不放物品i的最大价值,那么dp[i][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值

递推公式: dp[i][j] = max(dp[i - 1][j], dp[i][j - weight[i]] + value[i]);

(注意,完全背包二维dp数组 和 01背包二维dp数组 递推公式的区别,01背包中是 dp[i - 1][j - weight[i]] + value[i])

状态转移方程​
背包类型状态转移方程(二维DP)状态转移方程(一维DP)
​0-1背包​dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v)dp[j] = max(dp[j], dp[j-w] + v)(​​逆序​​更新)
​完全背包​dp[i][j] = max(dp[i-1][j], dp[i][j-w] + v)dp[j] = max(dp[j], dp[j-w] + v)(​​正序​​更新)

518. 零钱兑换II

问题描述:

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

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

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

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

解决方式:

class Solution {public int change(int amount, int[] coins) {int count = coins.length;//dp[i][j]表示前i个硬币凑够容量为j的包有多少种方法int[][] dp = new int[count][amount + 1];//初始化背包大小为0的情况for (int i = 0; i < coins.length; i++) {// 第一列的初始值为1dp[i][0] = 1;}//初始化只有第一种硬币的情况for (int j = 0; j <= amount; j++) {if (j % coins[0] == 0)dp[0][j] = 1;}for (int i = 1; i < count; i++) {for (int j = 1; j <= amount; j++) {if (j < coins[i]) {dp[i][j] = dp[i - 1][j];} else {//不选当前硬币的方法数 + 选当前硬币的方法数dp[i][j] = dp[i - 1][j] + dp[i][j - coins[i]];}}}return dp[count-1][amount];}
}

377. 组合总和Ⅳ

问题描述:

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

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

解决方式:

和爬楼梯一种做法,注意这里的排列需要要先遍历target再遍历nums

class Solution {public int combinationSum4(int[] nums, int target) {int[] dp = new int[target + 1];dp[0] = 1; // 总和为 0 时,只有一种方法(不选任何数)for (int i = 0; i <= target; i++) { // 遍历所有可能的总和 ifor (int j = 0; j < nums.length; j++) { // 遍历所有 nums[j]if (i >= nums[j]) { // 如果 nums[j] 可以选dp[i] += dp[i - nums[j]]; // 累加 dp[i - nums[j]]}}}return dp[target]; // 返回总和为 target 的排列数}
}

57. 爬楼梯(第八期模拟笔试)

问题描述:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 

每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢? 

注意:给定 n 是一个正整数。

解决方式:

import java.util.*;
public class Main{public static int combinationSum4(int[] nums, int target) {int[] dp = new int[target + 1];dp[0] = 1; // 总和为 0 时,只有一种方法(不选任何数)for (int i = 1; i <= target; i++) { // 遍历所有可能的总和 ifor (int n : nums) { // 遍历所有 numsif (i >= n) {dp[i] += dp[i - n];}}}return dp[target]; // 返回总和为 target 的排列数}public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] nums = new int[m];for(int i=0;i<m;i++){nums[i] = i+1;}int res =  combinationSum4(nums,n);System.out.println(res);}
}

相关文章:

代码随想录算法训练营Day37 | 完全背包基础理论 518. 零钱兑换II 377. 组合总和Ⅳ 57. 爬楼梯(第八期模拟笔试)

完全背包基础理论 不放物品i&#xff1a;背包容量为j&#xff0c;里面不放物品i的最大价值是dp[i - 1][j]。 放物品i&#xff1a;背包空出物品i的容量后&#xff0c;背包容量为j - weight[i]&#xff0c;dp[i][j - weight[i]] 为背包容量为j - weight[i]且不放物品i的最大价值…...

git仓库中.git 文件很大,怎么清理掉一部分

查询 .git 文件大小&#xff0c;在 git-bash 里执行&#xff08;后面有些命令不能执行&#xff0c;也请在 git-bash 里执行&#xff09; windows11 安装好后右键没有 git bash 命令-CSDN博客 du -sh .git // 592m .git 操作前最好先备份一份&#xff0c;避免推送到远程时出错…...

MySQL安装实战指南:Mac、Windows与Docker全平台详解

MySQL作为世界上最流行的开源关系型数据库&#xff0c;是每位开发者必须掌握的基础技能。本指南将手把手带你完成三大平台的MySQL安装&#xff0c;从下载到配置&#xff0c;每个步骤都配有详细说明和截图&#xff0c;特别适合新手学习。 一、Mac系统安装MySQL 1.1 通过Homebre…...

Rocky Linux 远程服务器画面GUI传输到本地显示教程——Xming

Rocky Linux 远程服务器画面GUI传输到本地显示教程——Xming 下载Xming安装Xming安装Xming字体Xming的使用设置测试 Xming可以提供GUI环境&#xff0c;在Linux服务器上执行GUI应用时&#xff0c;可通过Xming在Windows上执行GUI操作。 下载Xming 下载链接&#xff1a;https://…...

出现 org.apache.catalina.starup.HostConfig.deployDirectory 把web 应用程序部署到目录 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)临近毕业,很多人问的项目都是JSP这一类,普遍都是tomca…...

游戏引擎学习第283天:“让‘Standing-on’成为一个更严谨的概念

如果同时使用多个OpenGL上下文&#xff0c;并且它们都有工作负载&#xff0c;GPU或GPU驱动程序如何决定调度这些工作&#xff1f;我注意到Windows似乎优先处理活动窗口的OpenGL上下文&#xff08;即活动窗口表现更好&#xff09;&#xff0c;挺有意思的…… 当多个OpenGL上下文…...

React集成百度【JSAPI Three】教程(001):快速入门

文章目录 1、快速入门1.1 创建react项目1.2 安装与配置1.3 静态资源配置1.4 配置百度地图AK1.5 第一个DEMO1、快速入门 JSAPI Three版本是一套基于Three.js的三维数字孪生版本地图服务引擎,一套引擎即可支持2D、2.5D、3D全能力的地理投影与数据源加载,帮助开发者轻松搞定平面…...

python学习day2

今天主要学习了变量的数据类型&#xff0c;以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求&#xff0c;也把数据分为不同的类型。 代码如下&#xff1a; """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...

VAPO:视觉-语言对齐预训练(对象级语义)详解

简介 多模态预训练模型(Vision-Language Pre-training, VLP)近年来取得了飞跃发展。在视觉-语言模型中,模型需要同时理解图像和文本,这要求模型学习二者之间的语义对应关系。早期方法如 VisualBERT、LXMERT 等往往使用预先提取的图像区域特征和文本词嵌入拼接输入,通过 T…...

C语言学习笔记之函数

文章目录 1、函数的基本用法2、函数的参数传递2.1 全局变量2.2 复制传递方式2.3 地址传递方式 3、函数的传参—数组4、指针函数5、递归函数和函数指针5.1 递归函数5.2 函数指针5.3 函数指针数组 1、函数的基本用法 函数是一个完成特定功能的代码模块&#xff0c;其程序代码独立…...

集合进阶2

Java不可变集合、Stream流与方法引用深度解析 一、不可变集合&#xff08;Immutable Collections&#xff09;进阶指南 1.1 不可变集合核心特性 防御性编程&#xff1a;防止外部修改数据&#xff08;如传递集合给第三方库时&#xff09;线程安全&#xff1a;天然支持多线程读…...

2025云上人工智能安全发展研究

随着人工智能&#xff08;AI&#xff09;技术与云计算的深度融合&#xff0c;云上AI应用场景不断扩展&#xff0c;但安全挑战也日益复杂。结合2025年的技术演进与行业实践&#xff0c;云上AI安全发展呈现以下关键趋势与应对策略&#xff1a; 一、云上AI安全的主要挑战 数据泄露…...

【C++】模版(1)

目录 1. 泛型编程 2. 函数模版 2.1 函数模版概念 2.2 函数模版格式 2.3 函数模版的原理 2.4 函数模版实例化方式 隐式实例化 显式实例化 2.5 模版参数的匹配原则 3. 模版类 模版类的定义格式 模版类的实例化 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f…...

基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的去中心化商业扩散研究

摘要&#xff1a;本文探讨在去中心化商业趋势下&#xff0c;开源AI智能名片链动21模式S2B2C商城小程序源码如何助力企业挖掘数据价值、打破信息孤岛&#xff0c;实现商业高效扩散。通过分析该技术组合的架构与功能&#xff0c;结合实际案例&#xff0c;揭示其在用户关系拓展、流…...

5月19日day30打卡

模块和库的导入 知识点回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 作业&#xff1a;自己新建几个不同路径文件尝试下如何导入 一、导入官方库 …...

白杨SEO:不到7天,白杨SEO博客网站百度搜索显示和排名恢复正常!顺带说说上海线下GEO聚会分享和播客红利

大家好&#xff0c;我是白杨SEO&#xff0c;专注SEO十年以上&#xff0c;全网SEO流量实战派&#xff0c;AI搜索优化研究者。 5月开始&#xff0c;明显就忙起来了&#xff0c;不管是个人陪跑还是企业顾问&#xff0c;不管是需要传统SEO还是新媒体流量&#xff0c;还是当下这个A…...

Windows软件插件-音视频捕获

下载本插件 音视频捕获就是获取电脑外接的话筒&#xff0c;摄像头&#xff0c;或线路输入的音频和视频。 本插件捕获电脑外接的音频和视频。最多可以同时获取4个视频源和4个音频源。插件可以在win32和MFC程序中使用。 使用方法 首先&#xff0c;加载本“捕获”DLL&#xff0c…...

go 与面向对象编程(OOP)

Go 语言在设计上与传统面向对象&#xff08;OOP&#xff09;语言&#xff08;如 Java、C&#xff09;有明显差异&#xff0c;官方明确表示它并非纯面向对象语言。然而&#xff0c;它通过独特的方式实现了部分面向对象的核心特性。以下是关键分析&#xff1a; 1. Go 对传统 OOP…...

Mergekit——任务向量合并算法Ties解析

Mergekit——高频合并算法 TIES解析 Ties背景Ties 核心思想具体流程总结 mergekit项目地址 Mergekit提供模型合并方法可以概况为四大类&#xff1a;基本线性加权、基于球面插值、基于任务向量 以及一些专业化方法&#xff0c;今天我们来刷下基于任务向量的ties合并方法&#xf…...

Java 应用中的身份认证与授权:OAuth2.0 实现安全的身份管理

Java 应用中的身份认证与授权&#xff1a;OAuth2.0 实现安全的身份管理 在当今的软件开发领域&#xff0c;身份认证与授权是构建安全可靠应用的关键环节。而 Java 作为广泛使用的编程语言&#xff0c;在实现这一功能上有着诸多成熟的框架和方案。其中&#xff0c;OAuth2.0 凭借…...

【氮化镓】偏置对GaN HEMT 单粒子效应的影响

2025年5月19日,西安电子科技大学的Ling Lv等人在《IEEE Transactions on Electron Devices》期刊发表了题为《Single-Event Effects of AlGaN/GaN HEMTs Under Different Biases》的文章,基于实验和TCAD仿真模拟方法,研究了单粒子效应对关断状态、半开启状态和开启状态下AlG…...

Mysql 索引概述

索引&#xff08;index&#xff09;是帮助Mysql高效获取数据的数据结构 索引优点&#xff1a;1. 提高排序效率 2. 提高查询效率 索引缺点&#xff1a;1.索引占用空间&#xff08;可忽略&#xff09;2.索引降低了更新表的速度&#xff0c;如进行insert,update,delette 时效率降…...

HttpServletRequest常用功能简介-笔记

javax.servlet.http.HttpServletRequest 是 ServletRequest 接口的子接口&#xff0c;专用于处理 HTTP 协议相关的请求。它提供了访问请求行、请求头、请求参数以及请求属性等方法。 1.请求行&#xff08;Request Line&#xff09; ✅ 功能说明 请求行包含客户端发送的 HTTP …...

解决RAGFlow部署中镜像源拉取的问题

报错提示 Error response from daemon: Get "https://registry-1.docker.io/v2/ ": context deadline exceeded 解决方法 这个原因是因为拉取镜像源失败&#xff0c;可以在/etc/docker/daemon.json文件中添加镜像加速器&#xff0c;例如下面所示 {"registry…...

uniapp打包H5,输入网址空白情况

由于客户预算有限&#xff0c;最近写了两个uniapp打包成H5的案例&#xff0c;总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮&#xff0c;输入名称&#xff0c;网址 点击【发行】&#xff0c;生成文件 把这个给后端&#xff0c;就可以了 为什么空白呢 最重要一点&#xf…...

wsl2中Ubuntu22.04配置静态IP地址

第一步找到/etc/netplan目录下的01-netcfg.yaml文件&#xff0c;&#xff08;如果不存在则自己创建一个&#xff09;在里面配置一下代码&#xff1a; network:version: 2renderer: networkdethernets:eth0:dhcp4: noaddresses: [192.168.3.222/24]routes:- to: 0.0.0.0/0via: …...

C++(21):fstream的读取和写入

目录 1 ios::out 2 ios::in和is_open 3 put()方法 4 get()方法 4.1 读取单个字符 4.2 读取多个字符 4.3 设置终结符 5 getline() 1 ios::out 打开文件用于写入数据。如果文件不存在&#xff0c;则新建该文件&#xff1b;如果文件原来就存在&#xff0c;则打开时清除…...

NAT/代理服务器/内网穿透

目录 一 NAT技术 二 内网穿透/内网打洞 三 代理服务器 一 NAT技术 跨网络传输的时候&#xff0c;私网不能直接访问公网&#xff0c;就引入了NAT能讲私网转换为公网进行访问&#xff0c;主要解决IPv4(2^32)地址不足的问题。 1. NAT原理 当某个内网想访问公网&#xff0c;就必…...

Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析

简介 Timer 是一个 Unity 环境下高效、灵活的定时任务调度系统&#xff0c;支持以下功能&#xff1a; •支持多种时间源&#xff08;游戏时间 / 非缩放时间 / 真实时间&#xff09; •支持一次性延迟执行和重复执行 •提供 ID、回调、目标对象等多种查询和销毁方式 •内建…...

深入解析Spring Boot与Spring Security的集成实践

深入解析Spring Boot与Spring Security的集成实践 引言 Spring Security是Spring生态中用于处理认证和授权的强大框架。在Spring Boot项目中集成Spring Security可以轻松实现用户认证、权限控制等功能。本文将详细介绍如何从零开始集成Spring Security&#xff0c;并解决实际…...