算法记录 | Day44 动态规划

news2024/11/26 22:39:56

完全背包

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

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

完全背包的物品是可以添加多次的,所以要从小到大去遍历

# 先遍历物品,再遍历背包
for i in range(len(weight)):
    for j in range(weight[i],bagWeight+1):
        dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
        
# 先遍历背包,再遍历物品       
for j in range(bag_weight + 1):
    for i in range(len(weight)):
        if j >= weight[i]: dp[j] = max(dp[j], dp[j - weight[i]] + value[i])

dp状态图如下:
动态规划-完全背包

518.零钱兑换 II

思路:

注意题目描述中是凑成总金额的硬币组合数。组合不强调元素之间的顺序,排列强调元素之间的顺序

1.确定dp数组以及下标的含义:dp[j]:凑成总金额j的货币组合数为dp[j]

2.确定递推公式:dp[j] = dp[j] + dp[j - coins[i]]

凑成总金额为 i 的方案数 = 「不使用当前 coin,只使用之前硬币凑成金额 j 的方案数」+「使用当前 coin凑成金额 j−coin的方案数」。

3.dp数组如何初始化:dp[0]=1,dp[0] = 1是 递归公式的基础。如果dp[0] = 0 的话,后面所有推导出来的值都是0了

4.确定遍历顺序:外层for循环遍历物品(钱币),内层for遍历背包(金钱总额),组合数

外层for遍历背包,内层for循环遍历物品,排列数

5.举例推导dp数组

输入: amount = 5, coins = [1, 2, 5] ,dp状态图如下:

518.零钱兑换II

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

377.组合总和 Ⅳ

思路:

1.确定dp数组以及下标的含义:dp[i]: 凑成目标正整数为i的排列个数为dp[i]

2.确定递推公式:dp[i] = dp[i]+dp[i - nums[j]]

dp[i] =「不使用当前 nums[j]方案数」+「使用当前 nums[j]凑成 i - nums[j]的方案数」

3.dp数组如何初始化:dp[0]=1

4.遍历顺序 :求排列数就是外层for遍历背包,内层for循环遍历物品

5.举例来推导dp数组

我们再来用示例中的例子推导一下:

377.组合总和Ⅳ

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = [0 for _ in range(target+1)]
        dp[0] = 1

        for i in range(1,target+1):
            for j in nums:
                if i >= j:
                    dp[i] +=  dp[i-j]
        return dp[target]

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

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

相关文章

【初学人工智能原理】【3】梯度下降和反向传播:能改(上)

前言 本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白,由于缺少图片可能无法理解,故放到了最后,建议直接看代码(代码放到了前面)。 代码实…

itop-3568开发板驱动学习笔记(24)设备树(三)时钟实例分析

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 生产者属性#clock-cells 属性clock-output-namesclock-frequencyassigned-clockclock-indicesassigned-clock-parents 消费者属性 设备树中的时钟信息以时钟树形式体现,时钟树包括时钟的属性和结…

C#_语言简介

目录 1. C# 简介 2. Visual Studio 窗口界面显示 1. C# 简介 什么是程序? 程序(Program)简单来说就是: 计算机是无法听懂我们人类的语言的,也可以说我们通过我们日常交流的语言是无法控制计算机的,计算机…

排序算法 - 快速排序

文章目录 快速排序介绍快速排序实现快速排序时间复杂度和稳定性快速排序稳定性快速排序时间复杂度 代码实现核心&总结 每日一道算法,提高脑力。第二天,快速排序。 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的…

Spring容器技术

Spring容器技术 1. Spring核心容器介绍1.1 创建容器1.2 获取bean对象1.3 容器类层次结构1.4 BeanFactory 2. Spring核心容器总结2.1 容器相关2.2 bean相关2.3 依赖注入相关 1. Spring核心容器介绍 问题导入 问题:按照Bean名称获取Bean有什么弊端,按照B…

(七)ArcCatalog应用基础——图层操作与数据输出

(七)ArcCatalog应用基础——图层操作与数据输出 目录 (七)ArcCatalog应用基础——图层操作与数据输出 1.地图与图层操作1.1创建图层1.2设置文件特征1.3保存独立的图层文件 2.地理数据输出2.1输出为Shapefile2.2输出为Coverage2.3属…

[Spring]初始导读

1.Spring初始 1. 为什么要学框架 学习框架相当于从"小作坊"到"工厂"的升级 , 小作坊什么都要做 , 工厂是组件式装配 , 特点就是高效. 2.框架的优点展示(SpringBoot Vs Servlet) 使用SpringBoot 项目演示框架相比 Servlet 所具备的以下优点: 无需配置 …

KDZD电缆安全双枪刺扎器

一、产品背景 多年以来,电力电缆的维护迁移过程中的识别与刺孔,均按照行业标准DL409-91《电业安全工作规程(电力线路部分)》第234条要求,采用人工刺孔,一旦电缆识别出错,误刺孔带电电缆将对人身…

Win11调整分区大小的方法有哪些?

电脑磁盘分区的大小关系着我们的系统运行流畅、文件数据分门别类、磁盘空间充分利用等,是一个非常重要的工作。那么Win11调整分区大小的方法有哪些? 使用命令提示符 缩小分区 步骤1. 在搜索框中输入cmd并以管理员身份运行命令提示符。 步骤2. 依次输入…

分布式事务TCC 你真的理解了吗

TCC(补偿事务) TCC 属于目前比较火的一种柔性事务解决方案。TCC 这个概念最早诞生于数据库专家帕特 赫兰德(Pat Helland)于 2007 发表的 《Life beyond Distributed Transactions: an Apostate’s Opinion》 这篇论文&#xff0…

本地 WAF 已死,云 WAF 永生

多年来,Web 应用程序防火墙 (WAF) 一直是应用程序保护的代名词。事实上,许多应用程序安全团队认为保护其应用程序的最佳选择是一流的本地 WAF 解决方案,尤其是当这些应用程序部署在本地或私有云中时。 但自从引入本地 WAF 以来,…

授权码 + PKCE 模式|OIDC OAuth2.0 认证协议最佳实践系列【03】

​ 在上一篇文章中,我们介绍了 OIDC 授权码模式(点击下方链接查看),本次我们将重点围绕 授权码 PKCE 模式(Authorization Code With PKCE)进行介绍 ,从而让你的系统快速具备接入用户认证的标准…

R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习

详情点击链接:R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习 Meta分析的选题与文献检索 Meta分析Meta分析的选题策略文献检索数据库精确检索策略,如何检索全、检索准文献的管理与清洗,如何制定文献纳入排除标准文献数据获取技…

( 哈希表) 128. 最长连续序列 ——【Leetcode每日一题】

❓128. 最长连续序列 难度:中等 给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O ( n ) O(n) O(n) 的算法解决此问题。 示例 1: 输入…

ai数字人无限播是什么?数字人直播带货如何搭建?操作教程及注意事项分享

随着数字技术的不断进步,直播行业也在不断的发展壮大。其中,数字人直播成为了最为热门的直播方式之一。数字人直播利用AI技术创建出的虚拟数字人进行直播,给观众带来了全新的视觉体验。而随着数字人直播的不断发展,数字人直播带货…

力扣(LeetCode)1172. 餐盘栈(C++)

优先队列 解题思路:根据题意模拟。用数组存储无限数量的栈。重在实现 p u s h push push 和 p o p pop pop 操作。 对于 p u s h push push 操作,需要知道当前从左往右第一个空栈的下标。分两类讨论: ①所有栈都是满的,那么我…

基于台风信息查询 API 设计台风预警系统的基本思路

引言 在过去的几十年中,由于全球气候变化等因素的影响,台风的强度和频率都有所增加,给人类社会带来了极大的威胁。在这种背景下,一个高效可靠的台风预警和监测系统显得尤为重要。这种系统可以通过获取、存储、处理和分析各种相关…

产业数字化爆发,松山湖开发者村打通数实融合“最后一公里”

2023年正值第四次工业革命新十年开始之际,也是我国数字经济量质齐升新十年的开幕。2022年,中国全部工业增加值突破40万亿元大关,占GDP比重达33.2%,制造业规模连续13年位居世界首位。当以工业和制造业为代表的实体产业,…

过来人转本考试后的感悟和经验,真的很受用

过来人转本考试后的感悟和经验,真的很受用!转本不仅是分数的较量,也是信息收集、时间管理、学习能力、毅力等等的较量。同学们在转本中难免会遇见一些困难,为了避免走弯路,一起来看看过来人的感悟和经验吧!…

“我和AI抠图网站的秘密情缘“

在浏览器里面意外发现了一个AI抠图工,了解了一下,AI抠图基于深度学习框架,结合智能检测识别技术,目前已能够实现高精视,秒级全自动主体、场景像素级识别等的分割能力。 一款好的抠图工具,可以把照片变得更加…