代码随想录算法训练营第四十四天|57. 爬楼梯、322.零钱兑换、279. 完全平方数

news2024/11/17 0:04:35

KamaCoder 57. 爬楼梯
题目链接:题目页面 (kamacoder.com)

这道题使用完全背包来实现,我们首先考虑的是总的楼梯数,因此dp数组大小为n + 1 ,其意义是,在n阶时有多少种方法爬到楼顶,因此,当前n状态等于前面状态(1, m)状态之和。

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:满足凑出总楼梯的组合数

2)确定递推公式:我们把n个数组成看作1与n-1个组成,使用分而治之的思路来处理,dp[i] += dp[i - j]

3)确定初始值:dp[0]为1,没得选

4)确定遍历的数:注意一下边界问题

5)带入验证一下

代码:

#python acm模式
while True:
    try:
        n, m = map(int, input().split())
        dp = [0 for _ in range(n + 1)]  //dp数组大小为n+1
        dp[0] = 1  //初始化dp[0]
        for i in range(1, n + 1):  //从1开始,从0没意义
            for j in range(1, min(i, m) + 1):   //从前往后,遍历可能的楼梯数
                    dp[i] += dp[i - j]
        print(dp[n])
    except:
        break

LeetCode 322.零钱兑换
题目链接:322. 零钱兑换 - 力扣(LeetCode)

这道题使用完全背包来实现,要求的组成整数amount的最小硬币组合数,因此dp数组大小为n + 1 ,其意义是,在n阶时最小的硬币数量,因此,当前n状态等于前面状态的最小值。

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:满足凑出目标金额的最少硬币数量

2)确定递推公式:dp[i] = min(dp[i], dp[i - coin] + 1) (后面这个意思是从前coin的位置递推过来,加上一个硬币数)

3)确定初始值:dp[0]为0,当目标为0时当然一个硬币也不要

4)确定遍历的数:注意一下i要大于等于当前coin,否则数组会越界

5)带入验证一下

代码:

#python   //DFS
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dfs
        n=len(coins)
        @cache   //用一个装饰器
        def dfs(i,c):
            if i<0:  //判定结束条件
                return 0 if c==0 else inf
            if c<coins[i]: //确定一下coin
                return dfs(i-1,c)
            return min(dfs(i-1,c),dfs(i,c-coins[i])+1)  //返回最小的硬币数量,递归
        res=dfs(n-1,amount)  //结果
        return res if res<inf else -1  //看下结果呗,要么有,没有就-1
#python   //二维DP
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        n=len(coins)  //一共有n个硬币数量
        dp=[[inf]*(amount+1) for _ in range(n+1)]  //二维dp数组
        dp[0][0]=0  //初始化一下
        for i,x in enumerate(coins):  //使用枚举,把键与值分离
            for c in range(amount+1):   //同样的是在金额内部
                if c<x:    //当前的值放不下硬币了
                    dp[i+1][c]=dp[i][c]
                else:  //放得下,比较一下
                    dp[i+1][c]=min(dp[i][c],dp[i][c-x]+1)
        res=dp[n][amount]
        return res if res < inf else -1没有就-1
#python   //一维DP
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        n = len(coins)
        dp = [float('inf') for _ in range(amount + 1)]
        dp[0] = 0
        for i in range(1, amount + 1):
            for coin in coins:
                if i >= coin:
                    dp[i] = min(dp[i], dp[i - coin] + 1)
        return dp[-1] if dp[-1] < float('inf') else -1

LeetCode 279. 完全平方数
题目链接:279. 完全平方数 - 力扣(LeetCode)

和前面的做法异曲同工,注意一下范围就是

每道题都要考虑dp五步:

1)确定dp数组下标与值的关系:满足凑出目标金额的最少完全平方数数量

2)确定递推公式:dp[i] = min(dp[i], dp[i - j ** 2] + 1) (后面这个意思是从前j**2的位置递推过来,加上一个完全平方数)

3)确定初始值:dp[0]为0,当目标为0时当然完全平方数

4)确定遍历的数:注意一下i要大于等于当前j**2,否则数组会越界

5)带入验证一下

代码:

#python  一维dp
class Solution:
    def numSquares(self, n: int) -> int:
        dp = [inf for _ in range(n + 1)]
        dp[0] = 0
        for i in range(1, n + 1):
            for j in range(1, int(math.sqrt(i)) + 1): //从小于当前i的平方根数来
                dp[i] = min(dp[i], dp[i - (j ** 2)] + 1)
        return dp[-1]

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

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

相关文章

【腾讯云云上实验室-向量数据库】用向量数据库——实现高效文本检索功能

文章目录 前言Tencent Cloud VectorDB 简介Tencent Cloud VectorDB 使用实战申请腾讯云向量数据库腾讯云向量数据库使用步骤腾讯云向量数据库实现文本检索 结论和建议 前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据&#xff0c;也有部分人使用过非关…

【spring(五)】SpringMvc总结 SSM整合流程

目录 一、SpringMVC简介&#xff1a; 二、SpringMVC快速入门&#xff1a; 三、SpringMVC bean的管理&#xff1a;⭐ ①配置bean ②扫描bean 四、SpringMVC配置类&#xff1a;⭐ 五、SpringMVC 请求与响应 六、SpringMVC REST风格 七、SSM整合 异常处理&#xff1a; 八、…

Windows核心编程 进程遍历与文件加密

目录 进程的遍历 CreateToolhelp32Snapshot Process32First Process32Next 文件加密 使用openssl库进行DES加密 进程的遍历 什么是快照&#xff1a;虚拟中的快照&#xff1a; 我们在分析病毒&#xff0c;分析木马的时候&#xff0c;不能在真机分析&#xff0c;在虚拟机中…

【多线程】-- 02 线程创建之实现Runnable初识多线程并发问题

多线程 2 线程创建 2.2 实现Runnable接口 【学习提示】查看JDK帮助文档 定义MyRunnable类实现Runnable接口实现run()方法&#xff0c;编写线程执行体创建线程对象&#xff0c;调用start()方法启动线程 package com.duo.demo01;//创建线程方式二&#xff1a;实现Runnable接…

分布式事务,一致性理论, 两阶段提交(2PC), 三阶段提交(3PC),Seata分布式事务方案

文章目录 分布式事务&#xff1a;1、一致性理论2、两阶段提交&#xff08;2PC&#xff09;3、三阶段提交&#xff08;3PC&#xff09;4、Seata分布式事务方案 上一篇降到了 分布式锁&#xff0c;先来和大家聊一聊分布式事务&#xff0c; 分布式锁的链接如下&#xff1a; http…

位图的详细讲解

位运算操作符&#xff1a;或&#xff0c;与&#xff0c;异或&#xff0c;按位取反。 操作符 |两个中有一个是一则为一&两个都是一则为一^相同为零&#xff0c;不同为一~零变成一&#xff0c;一变成零 什么是位运算符: 位运算是直接对整型数据的二进制进行运算。 位图概念…

物流公司打印用什么软件,佳易王物流运单打印管理系统软件下载

物流公司打印用什么软件&#xff0c;佳易王物流运单打印管理系统软件下载 软件特色&#xff1a; 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。 2、物流开单打印&#xff0c;可以打印两联单或三联单&#x…

X-RAY POC编写

POC(Proof of Concept) - 利用证明 POC&#xff0c;Proof of Concept&#xff0c;意思是 利用证明。这个短语会在漏洞报告中使用&#xff0c;漏洞报告中的POC则是一段说明或者一个攻击的漏洞介绍&#xff0c;使得读者能够确认这个漏洞是真实存在的。 EXP(Exploit) - 漏洞利用…

GDPU 数据结构 天码行空11

文章目录 数据结构实验十一 图的创建与存储一、实验目的二、实验内容三、【实验源代码】&#x1f37b; CPP版&#x1f37b; c 语言版&#x1f37b; java版 四、【实验结果】五、【实验总结】 数据结构实验十一 图的创建与存储 一、实验目的 1、 理解图的存储结构与基本操作&a…

【STM32】新建工程

学习来源&#xff1a;[2-2] 新建工程_哔哩哔哩_bilibili 目前STM32的开发主要有基于寄存器的开发方式、基于标准库也就是库函数的方式和基于HAL库的方式。本学习是基于库函数的方式。&#xff08;各种资料去百度云下载&#xff09; 1 建立工程文件夹 Keil中新建工程&#xf…

高性能Mysql第三版学习(一)

学习目标&#xff1a; 高性能Mysql第3版 学习内容&#xff1a; MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 学习时间&#xff1a; 周一至周五晚上 9点—晚上10点周六晚上9点-10点周日晚上9 点-10点 学习…

公众号留言功能还有可能开放吗?

为什么公众号没有留言功能&#xff1f;2018年2月12日&#xff0c;TX新规出台&#xff1a;根据相关规定和平台规则要求&#xff0c;我们暂时调整留言功能开放规则&#xff0c;后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

初出茅庐的小李博客之C语言必备知识共用体

C语言必备知识共用体 共用体是一种构造数据类型&#xff0c;有时候也称之为联合体。 它的用途&#xff1a; 使几个不同类型的变量共占一段内存。 共用体举例 union 共用体名 { 类型标识符 成员名;类型标识符 成员名; };union data //共用体名字是data{ int i; …

面试题:什么是自旋锁?自旋的好处和后果是什么呢?

文章目录 什么是自旋自旋和非自旋的获取锁的流程 自旋锁的好处AtomicLong 的实现实现一个可重入的自旋锁示例自旋的缺点适用场景 什么是自旋 “自旋”可以理解为“自我旋转”&#xff0c;这里的“旋转”指“循环”&#xff0c;比如 while 循环或者 for 循环。“自旋”就是自己…

初学剪辑者找视频素材就上这6个网站

视频剪辑必备的6个素材网站&#xff0c;高清无水印&#xff0c;还可以免费下载&#xff0c;无版权限制&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要以设计类素材为主&#…

宝塔 Linux 面板安装一个高大上的论坛程序 —— Flarum

这个是很早搭建的版本,基于宝塔面板,比较复杂,如果想要简单的搭建方法,可以参看咕咕新写的这篇: 【好玩的 Docker 项目】10 分钟搭建一个高大上的论坛程序 购买腾讯云轻量应用服务器 待补充 登录服务器 待补充 BBR 加速脚本 BBR 加速脚本: BASH cd /usr/src &…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…

Chatbot开发三剑客:LLAMA、LangChain和Python

聊天机器人&#xff08;Chatbot&#xff09;开发是一项充满挑战的复杂任务&#xff0c;需要综合运用多种技术和工具。在这一领域中&#xff0c;LLAMA、LangChain和Python的联合形成了一个强大的组合&#xff0c;为Chatbot的设计和实现提供了卓越支持。 首先&#xff0c;LLAMA是…

蓝牙运动耳机哪个好?蓝牙运动耳机排行榜前十名

​在运动中&#xff0c;音乐可以激发你的热情和动力&#xff0c;而一款好的运动耳机则可以让你更好地享受音乐。然而&#xff0c;市面上的运动耳机品牌和型号众多&#xff0c;质量参差不齐。所以&#xff0c;今天精选了5款市面上比较优秀的运动耳机给大家参考&#xff0c;是你运…

【开源】基于JAVA的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…