代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶), 322. 零钱兑换,279.完全平方数

目录

题目链接:70. 爬楼梯 (进阶)

思路

代码

题目链接:322. 零钱兑换

思路

代码

题目链接:279.完全平方数

思路

代码

总结


题目链接:70. 爬楼梯 (进阶)

思路

        依旧是转换成背包问题,每次能爬的阶数就是物品,且物品可以重复使用,例如爬完一阶,可以再爬一阶,而背包则是楼梯的总阶数,这样就是完全背包问题了。

        ①dp数组,dp[j]表示爬j阶楼梯时有dp[j]种方法

        ②递推数组,dp[j] += dp[j-i]

        ③dp数组初始化,dp[0] = 1,其余为0

        ④遍历顺序,先背包后物品,按照题意求的是排列数

        ⑤推导dp数组

代码

#include <iostream>
#include <vector>
using namespace std;
int main() {int n, m; // n是总台阶数,m是一次至多爬m阶while (cin >> n >> m) {vector<int> dp(n + 1, 0);dp[0] = 1;// 先背包后物品,求排列数for (int j = 1; j <= n; j++) {for (int i = 1; i <= m; i++) {if (j >= i) {dp[j] += dp[j - i];}}}cout << dp[n];}
}

题目链接:322. 零钱兑换

思路

        硬币无限使用,完全背包问题。求的是最小硬币数,所以递推公式更新的是最小值

        ①dp数组,dp[j]表示总金额为j时可以兑换最少的硬币数

        ②递推公式,dp[j] = min(dp[j-coins[i]]+1, dp[j])

        ③dp数组初始化,dp[0] = 0,其余为int最大值,因为递推公式更新的是最小值

        ④遍历顺序,本题求的是商品数量的最小值,所以排列和组合都一样

        ⑤推导dp数组

代码

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for (int i = 0; i < coins.size(); i++) {for (int j = coins[i]; j <= amount; j++) {// 若dp[j - coins[i]为初始值,跳过if (dp[j - coins[i]] != INT_MAX) {dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}if (dp[amount] == INT_MAX)return -1;return dp[amount];}
};

题目链接:279.完全平方数

思路

        ①dp数组,dp[j]表示和为j的完全平方数的最小个数为dp[j]

        ②递推公式,dp[j] = min(dp[j-(i*i)]+1,dp[j])

        ③dp数组初始化,dp[0] = 0,其余为int最大值

        ④遍历顺序,与322.零钱兑换类似,只求最小个数,排列组合一样

        ⑤推导dp数组

代码

class Solution {
public:int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);dp[0] = 0;// 先物品,后背包// i*i<=n时说明物品重量没有超过背包for (int i = 1; i * i <= n; i++) {for (int j = i * i; j <= n; j++) {// j从i*i开始,保证当前的商品可以放进背包dp[j] = min(dp[j - (i * i)] + 1, dp[j]);}}return dp[n];}
};

总结

        ①完全背包问题的应用:求装满背包时最大的商品数量,最小的商品数量

        ②当不确定与排列组合有没有关系时,选相同的结果进行举例,例如{1,2}和{2,1}有无区别

        ③完全背包与01背包相比,少了商品数量的限制,好像更简单一点

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

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

相关文章

package.json.依赖版本修改判断

package.json. 的dependencies已经改了axios版本"axios": “^1.6.8”, 查看dist\cdn\axios\1.0.0\axios.min.js中内容还是&#xff1a;/* axios v0.17.1 | © 2017 by Matt Zabriskie */以为没有更新axios版本 查看当前项目使用的包以及版本&#xff0c;不包括依…

自然语言处理: RAT = CoT + RAG

Retrieval Augmented Thoughts (RAT) 是一种协同思维链 (CoT) 和检索增强生成 (RAG) 的 AI 提示策略&#xff0c;助力解决具有挑战性的长任务推理和生成。 RAG 有关于RAG的介绍可以参考我之前的博文: 自然语言处理: 第十五章RAG(Retrieval Augmented Generation) 开发能够像人…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体&#xff0c;中国在数字货币领域的发展一直备受关注。近年来&#xff0c;中国政府积极推动数字货币的研究和试点工作&#xff0c;逐步开放数字货币交易试点&#xff0c;并计划推出中国唯一合法数字货币——数字人民币&#xff08;RMB Coin&#…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

Broadwell,Broadwell-IBRS,Broadwell-noTSX,Broadwell-noTSX-IBR之间的区别

Broadwell是Intel第五代微架构的处理器系列&#xff0c;基于14纳米制程技术&#xff0c;是对前代Haswell架构的工艺改进&#xff08;即“Tick”阶段&#xff09;&#xff0c;主要特点是提高了能效和降低了功耗&#xff0c;同时在一定程度上提升了性能。它是为笔记本电脑、移动设…

Spring框架中的ClassUtils工具类深度解析

1. 概述 ClassUtils是Spring框架中提供的一个工具类&#xff0c;主要用于简化Java反射API的使用&#xff0c;提供了一系列便捷的方法来处理类相关的操作&#xff0c;比如获取类的包名、获取类的简单名称、判断类是否可实例化等。 2. 用途 ClassUtils的主要用途包括&#xff1…

一个快速在线生成二维码的工具,文件在线预览,在线报名,在线二维码设计,在线二维码生成器,扫一扫二维码在线预览

在数字化时代&#xff0c;二维码已经成为我们生活中不可或缺的一部分。无论是支付、身份识别&#xff0c;还是信息分享&#xff0c;二维码都以其便捷、高效的特点赢得了广大用户的青睐。然而&#xff0c;对于普通用户而言&#xff0c;如何快速、简单地生成和管理二维码却是一个…

5分钟掌握Pydantic

数据模型定义&#xff1a;使用 Python 类来定义数据模型&#xff0c;这些类可以自动将输入转换为 Python 数据类型。 from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: str类型检查&#xff1a;Pydantic 强制执行类型检查&#xff0c;确保传入的数…

小旋风蜘蛛池优化版

下载地址&#xff1a;小旋风蜘蛛池.zip 配置的时候需要做伪静态 #如果用的是宝塔面板设置伪静态&#xff0c;则去掉 第一行 的 location / { 和最后一行的 } location / { rewrite ^/template/(.*)\.html$ /index.php last; rewrite ^/temp/(data|db|robotlog|tplrules|errp…

前端css中animation(动画)的使用

前端css中animation的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、animation-name&#xff08;名称&#xff09;属性&#xff08;二&#xff09;、animation-duration&#xff08;持续时间&#xff09;属性1.前两个属性举例&#xff0c;源码12.源码1运行效果&am…

Redis线程模型

文章目录 &#x1f496; Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程&#xff1f; &#x1f496; Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说&#xff0c;Redis 一直是单线程模型。不过&#xff0c;在 Redis 4…

SinoDB数据库的RAW TABLE

RAW表是不记录日志的永久表&#xff0c;类似于无日志模式数据库中的表。对于RAW表&#xff0c;支持对其进行更新、插入和删除操作&#xff0c;但日志是不会记录这些操作。可以在RAW表上定义索引&#xff0c;但不能在RAW表上定义唯一约束、主键约束或引用约束&#xff08;refere…

语音识别之特征提取与起始检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

关闭前端统一请求库设计与落地

前言 对于一个前端工程师而言&#xff0c;每天都在面对的较多的需求场景就是调用后端的接口&#xff0c;但是因为众所周知的原因&#xff0c;前端目前已经有无数种调用接口的方式&#xff0c;例如&#xff1a;之前有基于 XHR、Axios、Fetch 进行封装的工具&#xff0c;大家都试…

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求&#xff0c;简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽&#xff1f; 概览 还记得 X-Window 上老旧的回调函数系统吗&#xff1f;通常它不是类型安全的并且很复杂。&#xff08;使用&#xff09;它&#xff08;会&#xff09;有很多…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖&#xff0c;安装使用超简单&#xff1b; 2、已经有非常多的系统集成 例如&#xff1a;docker HAProxy Nginx JMX等等&#xff1b; 3、服务自动化发现&#xff1b; 4、直接集成到代码&#xff1b; 5、设计思想是按照分布式、微服…

springboot webscoket示例:增加定时心跳逻辑

websocket服务端增加定时发送心跳机制 ServerEndpoint(value "/websocket/{uuid}") Component public class DevMessageHandleController {private static final Logger logger LoggerFactory.getLogger(DevMessageHandleController.class);//concurrent包的线程安…

数组扁平化

数组扁平化 输入&#xff1a;[1,[2,[3,5],5],6] 输出&#xff1a;[1,2,3,4,5,6] 方法一&#xff1a;递归 const transformArray (arr, res) > {for (let i 0; i < arr.length; i) {if (arr[i] instanceof Array) {transformArray(arr[i], res)} else {res.push(arr…

面试官:谈谈你知道的设计模式❓

创建型模式&#x1f527; 1&#xff09;单例模式&#xff08;Singleton&#xff09;&#x1f6a9; 确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 2&#xff09;工厂方法模式&#xff08;Factory Method&#xff09;&#x1f6a9; 定义一个创建对象的接口&#…

YashanDB与帆软信创商业智能软件完成兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与帆软信创商业智能软件&#xff08;V6.0&#xff09;顺利完成兼容性互认证&#xff0c;经严格测试&#xff0c;双方产品能够相互兼容&#xff0c;稳定运行。 崖山数据库系统YashanDB是深圳计算科学研究院自主研发设计…