Leetcode 刷题笔记1 动态规划part05

FPGA:UART串口接收(高干扰情况) 在上一篇文章中介绍过UART串口接收模块,其中一个需要优化的方向就是在高干扰情况下,如何实现可靠的UART串口接收任务。 阅读详情

开始完全背包

不同于01背包,完全背包的特色在于元素可以重复拿取, 因此在递归公式和遍历顺序上都有些许不同。

leetcode 518 零钱兑换 ||

在组合方式中所用到的递推公式是dp[ j ] = dp[ j - coins[i]] + dp[ j ]

对于coins[ i ] > j 的情况,for j in range(coin[ i ], amount + 1)不会执行,即实现dp[ i ][j] = dp[ i - 1][j]

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp = [0] * (amount + 1)
        dp[0] = 1
        for i in range(len(coins)):
            for j in range(coins[i], amount + 1):
                dp[j] += dp[j - coins[i]]
        return dp[amount]

leetcode 377 组合总和 IV

如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。
测试代码:

from typing import List

class Solution:
    # 方式1: 先遍历物品,再遍历背包(求组合数)
    def change_order1(self, amount: int, coins: List[int]) -> int:
        dp = [0] * (amount + 1)
        dp[0] = 1
        paths = [[] for _ in range(amount + 1)]  # 记录路径
        paths[0].append([])  # 初始化空组合

        for coin in coins:  # 遍历物品
            for j in range(coin, amount + 1):  # 遍历背包
                dp[j] += dp[j - coin]
                for path in paths[j - coin]:  # 复制路径
                    paths[j].append(path + [coin])

        # 打印所有组合
        print(f"先遍历物品,再遍历背包(组合数: {dp[amount]}):")
        for path in paths[amount]:
            print(path)

        return dp[amount]

    # 方式2: 先遍历背包,再遍历物品(求排列数)
    def change_order2(self, amount: int, coins: List[int]) -> int:
        dp = [0] * (amount + 1)
        dp[0] = 1
        paths = [[] for _ in range(amount + 1)]  # 记录路径
        paths[0].append([])  # 初始化空排列

        for j in range(amount + 1):  # 遍历背包
            for coin in coins:  # 遍历物品
                if j - coin >= 0:
                    dp[j] += dp[j - coin]
                    for path in paths[j - coin]:  # 复制路径
                        paths[j].append(path + [coin])

        # 打印所有排列
        print(f"先遍历背包,再遍历物品(排列数: {dp[amount]}):")
        for path in paths[amount]:
            print(path)

        return dp[amount]

# PyCharm 运行示例
if __name__ == "__main__":
    solution = Solution()
    amount = 5
    coins = [1, 2, 5]

    # 调用两种方法
    result1 = solution.change_order1(amount, coins)
    result2 = solution.change_order2(amount, coins)

    print(f"先遍历物品,再遍历背包(总组合数):{result1}")
    print(f"先遍历背包,再遍历物品(总排列数):{result2}")

解题思路:

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = [0] * (target + 1)
        dp[0] = 1
        for i in range(1, target + 1):
            for j in range(len(nums)):
                if i - nums[j] >= 0:
                    dp[i] += dp[i - nums[j]]
        return dp[target]

卡码网 57 爬楼梯

分析好重量m和包容量n可解

import sys

def climbing_stairs(n, m):
    dp = [0] * (n + 1)
    dp[0] = 1
    for j in range(1, n + 1):
        for i in range(1, m + 1):
            if j >= i:
                dp[j] += dp[j - i]
    return dp[n]
 
if __name__ == '__main__':
    n, m = list(map(int, input().split()))
    print(climbing_stairs(n, m))

JavaScript - Blob / File / base64 使用场景介绍与相互转换 前言 本文首先介绍一下这三种对象使用场景,最后介绍下它们之间互转格式的解决方案。 您前端一旦涉及到文件或图片上传到服务器, 就势必离不了Blob/File/base64三种主流的类型。 Blob MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 您可以观察到,像一些图片处理插件(例如有名的vue-cropper)图片裁剪插件, 它们将图片处理完毕后,都将使用blob对象返回处理好的图片,供开发者用于上传服务器。 阅读详情

相关推荐

U盘安装单系统ubuntu10.04之全过程&拔掉U盘后系统无法启动

借助U盘把电脑装成ubuntu单系统之过程记录,以及遇到拔掉U盘后系统无法启动问题,电脑就显示: Non-System disk or disk error, replace and strike any key when ready

CXHPLY的专栏 8677

leetcode刷题-动态规划part01

楼梯一共有1阶台阶:1种;三阶台阶:3种(1阶+2阶)递推关系:依赖于前两种状态,f(n)=f(n-1)+f(n-2)斐波那契数: 1 1 2 3 5 8。相当于爬楼梯题目的消费版。其实就是 斐波那契数。

emmmmXxxy的博客 517

霍尔式流量计背后的技术和算法

例如,在一项实验中,当流量低于最小操作范围(0.250 L/min)时,误差比其他流量大,但仍然在95%的精度范围内可接受。例如,在Honeywell电子学的测试中,使用30英寸水柱的压力计和热电偶测量气体特性,记录并计算实际和理论质量流量,以确定修正系数。霍尔式流量计的校准系数是通过一系列精确的测量和计算步骤确定的,以确保其测量结果的准确性和可靠性。霍尔式流量计的校准系数是通过严格的环境条件、精确的测量步骤和实验数据确定的。其中,Qs是标尺介质的流量,K是修正系数,Qm是用户介质的流量。

百态·数智思维 | 聚焦大数据、量化与未来AI 1233

动态规划 | part05

摘要: 本文探讨了完全背包问题中的组合与排列解法差异,以LeetCode 518(零钱兑换II)和377(组合总和IV)为例。关键点在于遍历顺序: 组合数(不考虑顺序):外层循环硬币,内层循环金额,确保硬币按固定顺序使用,避免重复计数(如[1,2]与[2,1]视为同一组合)。 排列数(考虑顺序):外层循环金额,内层循环硬币,允许任意顺序组合(如[1,2]和[2,1]视为不同)。 代码示例展示了两种场景的动态规划实现,并延伸至爬楼梯问题(每次可跨1~m阶,求排列数)。核心结论:组合问题固定硬币顺序,排列问题需

2403_88856345的博客 1133

GPU加速的容器化AI开发:AnolisOS/CentOS8中的NVIDIA驱动与CUDA最佳实践

本文详细介绍了在AnolisOS/CentOS8系统中配置NVIDIA驱动与CUDA的最佳实践,涵盖驱动安装、CUDA工具链配置、容器运行时设置及性能优化等关键步骤。特别针对容器化AI开发场景,提供了GPU透传和资源管理的实用方案,帮助开发者构建高效的GPU加速开发环境。

weixin_27791839的博客 340

UFS电源管理实战:如何优化手机存储的功耗与性能(附实测数据)

本文深入探讨了UFS电源管理的实战优化策略,旨在平衡手机存储的功耗与性能。通过解析UFS核心电压域与工作状态,重点介绍了通过动态调整bActiveICCLevel(活动电流等级)来实现精细控制,并结合实测数据与场景驱动的智能策略,为Android系统与硬件工程师提供了降低功耗、提升流畅度的有效方法。

weixin_29214559的博客 504

day 43 动态规划 part05

dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i])思路:本题物品的重量为stones[i],物品的价值也为stones[i]。求几种方法常用递推公式:dp[j] += dp[j - nums[i]];

Zlq_Lin的博客 383

把开源 Skills 集成到 LangGraph 项目

1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。

lpfasd123的博客 898

【代码随想录训练营第42期 Day38打卡 - 动态规划Part6 - LeetCode 322. 零钱兑换 279.完全平方数 139.单词拆分

动态规划--完全背包

记得要努力变强 1734

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 384

【FISCO-BCOS】 八、ubuntu配置Java环境

ubuntu配置Java环境需根据自己的java版本号进行细节修改,本文以jdk11.0.18版本为例。ps:通过此法还可以查看java安装路径,但必须是环境配置成功的情况下才能使用。二、添加Java环境路径。四、检查java环境设置。

naihe_fish的博客 4309

代码随想录训练营 Day35打卡 动态规划 part03 01背包理论基础 416. 分割等和子集

代码随想录训练营 Day35打卡 动态规划 part03 01背包理论基础 416. 分割等和子集

qq_42952637的博客 1650

海思SD3403/SS928V100开发(6)单路GMSL-MIPI-YUV相机视频输入调试

硬件连接:森云GMSL相机 -> GMSL 解串器 -> SD3403 MIPI0暂时先进行单路视频输入通路调试。

jzwjzw19900922的博客 1932

代码随想录算法训练营 动态规划part05

将每次操作中「重量较少/相等」的石子放到「负号堆」,代表在这次操作中该石子重量在「最终运算结果」中应用 −-− 运算符。其实所谓的「有放回」操作,只是触发调整「某个原有石子」所在「哪个堆」中,并不会真正意义上的产生「新的石子重量」。当对“虚拟石子”添加 + 符号,即可 +(a−b),展开后为 a−b,即起始石子 a 和 b 所在「石子堆」不变。当对“虚拟石子”添加 − 符号,即可 −(a−b),展开后为 b−a,即起始石子 a 和 b 所在「石子堆」交换。一最后一块石头的重量 II。

m0_63297917的博客 317

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【代码随想录Day36】动态规划Part05

【代码】【代码随想录Day36】动态规划Part05。

Shayne 的博客 554

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

动态规划 part05

完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。同样leetcode上没有纯完全背包问题,都是需要完全背包的各种应用,需要转化成完全背包问题,所以我这里还是以纯完全背包问题进行讲解理论和原理。

xmu_cjs的博客 192

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【LeetCode题目详解】第九章 动态规划 part05 1049. 最后一块石头的重量 II 494. 目标和 474.一和零(day43补)

本题其实和416. 分割等和子集几乎是一样的,只是最后对dp[target]的处理方式不同。416. 分割等和子集相当于是求背包是否正好装满,而本题是求背包最多能装多少。此时 大家应该不禁想起,我们之前讲过的回溯算法:39. 组合总和是不是应该也可以用dp来做啊?是的,如果仅仅是求个数的话,就可以用dp,但回溯算法:39. 组合总和要求的是把所有组合列出来,还是要使用回溯法爆搜的。后面我们在讲解完全背包的时候,还会用到这个递推公式!不少同学刷过这道题,可能没有总结这究竟是什么背包。

weixin_67972246的博客 640

代码随想录训练营 Day39打卡 动态规划 part07 198. 打家劫舍 213. 打家劫舍II 力扣 337. 打家劫舍III

代码随想录训练营 Day39打卡 动态规划 part07 198. 打家劫舍 213. 打家劫舍II 力扣 337. 打家劫舍III

qq_42952637的博客 1120

算法训练营DAY37 第九章 动态规划 part05

分析dp[1][4]的推导过程,需要对比:目前背包容量为4,如果空出物品1的重量3,剩余重量为1的背包的最大价值+物品一的价值dp[i][j - weight[i]] + value[i];所以递推公式为dp[i][j] = max(dp[i - 1][j], dp[i][j - weight[i]] + value[i]);dp[i][j]:使用 下标为[0, i]的coins[i]能够凑满j(包括j)这么大容量的包,有dp[i][j]种组合方法。有N件物品和一个最多能背重量为W的背包。

2401_89133587的博客 2106

代码随想录打卡Day43 | 动态规划part05

剩下的部分和 LeetCode416分割等和子集 很类似,target就用数组sum的一半,然后dp[j]尽可能靠近target。最后的结果用 sum-dp[target] 就是另一堆的石块,在减去 dp[target]就是结果。本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,第一题、最后一块石头的重量 LeetCode1049。

lionelwhl的博客 334

动态规划part05 -- 子序列

【代码】动态规划part05 -- 子序列。

qq_45158075的博客 264

代码随想录 day43 第九章 动态规划 part05

关联 leetcode1049. 最后一块石头的重量 II思路把石头分成重量近似相等的两堆01背包问题不一定非要有 重量 和 价值两个维度本题就是 重量 同时是 价值dp数组以及下标的含义dp[j]表示 背包总容量(所能装的总重量)是j时,最大重量为dp[j]递推公式// 01背包通用公式// weightJ: J的重量;valueJ: J的价值dp[j] = max( dp[j], dp[j - weightJ] + valueJ )// max( 不放i , 放入i后 )

weixin_60315213的博客 588

夸父追日:第九章 动态规划 part05

夸父追日第37天

qq_56221558的博客 609

代码随想录算法训练营三十二天|动态规划part05(完全背包)

完全背包:518.零钱兑换II、377组合总和IV、70爬楼梯(进阶版)

欢迎光临花开富贵的博客 1314

代码随想录算法训练营 | 动态规划:part05 | 多重背包问题、打家劫舍问题

一开始走误区了,以为要将父节点和爷节点的状况传递进去。看了下思路才知道怎么写。但是dp[1]得取0和1的最大值。//还是有点忘记那些背包在不同需求下导致的不同写法了。原来要分两种情况各自dp即可。来自代码随想录里的各种背包的图片总结如上,很详细。

jcc的博客 240

【动态规划part05】| 1049. 最后一块石头的重量 II 、494. 目标和 、474.一和零

代码随想录算法训练营Day43

m0_61801103的博客 273
上一篇: Leetcode 刷题笔记1 动态规划part04
下一篇: 基础--素因数
平乐君
博客等级 码龄5年 65粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值