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

【Python 算法】动态规划

本博客笔记内容来源于灵神,视频链接如下:https://www.bilibili.com/video/BV16Y411v7Y6?vd_source=7414087e971fef9431117e44d8ba61a7&spm_id_from=333.788.player.switch

01背包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

计算了f[i+1],f[i]就没用了,相当于每时每刻只有两个数组在参与运算:
在这里插入图片描述
在这里插入图片描述
494题是求方案数的,要初始化成 0。
如果是恰好型背包并且要计算最大最小,那么初始值就和 inf 有关。

力扣494题:

在这里插入图片描述

对于至少/至多的变形问题,变形类似:

在这里插入图片描述

在这里插入图片描述

完全背包

在这里插入图片描述
在这里插入图片描述
力扣322题:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

其中:从二维递推式来理解,
例如01背包,更新f【c】的值需要的是当前f【c】和上一个状态的f【c-w】,因为我们现在之后一个数组,若是正序,f【c-w】就更新过了,也就不是上一个状态的值了,所以必须逆序
若是完全背包,更新f【c】的值需要的是当前f【c】和当前状态的f【c-w】,需要的就是更新过的值,所以正序是没问题的。

例题:力扣2915. 和为目标值的最长子序列的长度

在这里插入图片描述

class Solution:def lengthOfLongestSubsequence(self, nums: List[int], target: int) -> int:# 先使用递归# 恰好等于target ==背包容量# 长度即选物品,其价值为1# 只能选一次:01背包问题n = len(nums)# 1.递归:@cachedef dfs(i,c):if i<0:return 0 if c==0 else -infif c< nums[i]:return dfs(i-1,c)return max(dfs(i-1,c),dfs(i-1,c-nums[i])+1)ans= dfs(n-1,target)dfs.cache_clear()return ans if ans>-1 else -1# 2. 转为递推:dp[i+1][c]= max(dp[i][c],dp[i][c-nums[i]]+1) 整体加了1dp =[[-inf]*(target+1) for _ in range(n+1)]dp[0][0]=0for i,x in enumerate(nums):for c in range(target+1):if c<x:dp[i+1][c]=dp[i][c]else:dp[i+1][c]= max(dp[i][c],dp[i][c-x]+1)ans = dp[n][target]return ans if ans>-1 else -1# 3. 进一步优化为滚动数组dp =[[-inf]*(target+1) for _ in range(2)]dp[0][0]=0for i,x in enumerate(nums):for c in range(target+1):if c<x:dp[(i+1)%2][c]=dp[i%2][c]else:dp[(i+1)%2][c]= max(dp[i%2][c],dp[i%2][c-x]+1)ans = dp[n%2][target]  # 记得这里也要%2return ans if ans>-1 else -1#  4. 进一步优化为1维滚动数组dp =[-inf]*(target+1)dp[0]=0for x in nums:for c in range(target,x-1,-1):if c<x:dp[c] = dp[c]else:dp[c]= max(dp[c],dp[c-x]+1)ans = dp[target]  return ans if ans>-1 else -1

相关文章:

【Python 算法】动态规划

本博客笔记内容来源于灵神&#xff0c;视频链接如下&#xff1a;https://www.bilibili.com/video/BV16Y411v7Y6?vd_source7414087e971fef9431117e44d8ba61a7&spm_id_from333.788.player.switch 01背包 计算了f[i1]&#xff0c;f[i]就没用了&#xff0c;相当于每时每刻只有…...

nginx的自定义错误页面

正常访问一个不存在的页面是会报404这个错误 我们可以自定义错误页面 error_page 404 /40x.html 然后调用location 最后创建文件 写入你想写的内容 最后实验成功 注意在nginx的配置文件里&#xff0c;注意在加分号 在写完配置时...

制作service列表并打印出来

制作service列表并打印出来 在Linux中&#xff0c;服务&#xff08;Service&#xff09;是指常驻在内存中的进程&#xff0c;这些进程通常监听某个端口&#xff0c;等待其他程序的请求。服务也被称为守护进程&#xff08;Daemon&#xff09;&#xff0c;它们提供了系统所需的各…...

UML 4+1 视图:搭建软件架构的 “万能拼图”

UML 41 视图是一种全面描述软件架构的方法&#xff0c;以下为你详细介绍各个视图&#xff1a; 1.逻辑视图&#xff08;Logical View&#xff09; 概述&#xff1a;逻辑视图主要用于展现系统的功能架构&#xff0c;它聚焦于系统提供的功能以及这些功能的逻辑组织方式&#xff…...

tkinter 库(设计图形界面系统)

几何管理的应用 # tkinter 库 是Python的标准GUI库&#xff0c;提供了创建图形用户界面的功能。 tkinter是一个跨平台的GUI库&#xff0c;支持Windows、macOS和Linux等操作系统。它是Python的标准库之一&#xff0c;无需额外安装。 #tkinter.Entry 是 Tkinter 的输入框控件类&…...

WordPress汉主题

WordPress汉主题wphan.com(以下简称WP汉主题)是一个专注于WordPress中文主题与插件开发的专业团队。该团队致力于为中文用户提供高质量的WordPress主题和插件资源&#xff0c;帮助用户轻松创建专业且吸引人的网站。 WP汉主题提供多种功能丰富的WordPress主题&#xff0c;涵盖博…...

在线文档协作工具选型必看:14款产品对比

本文将深入对比14款在线文档协作工具&#xff1a;PingCode; 2. Worktile; 3. 语雀; 4. 金山文档; 5. WPS云文档; 6. Google Docs; 7. 轻雀文档; 8. Microsoft 365 Online; 9. 明道云文档等。 在数字化办公日益普及的今天&#xff0c;企业对高效协同的需求不断升级&#xff0c;在…...

分布式计算Ray框架面试题及参考答案

目录 简述 Ray 的架构设计核心组件及其协作流程 全局控制存储(GCS)在 Ray 中的作用是什么?如何实现高可用性? 对比 Ray 的任务(Task)与 Actor 模型,说明各自适用场景 解释 Ray 的 Object Store 如何实现跨节点数据共享与零拷贝传输 Ray 的分布式调度器如何实现毫秒级…...

Java虚拟机JVM知识点(持续更新)

JVM内存模型 介绍下内存模型 根据JDK8的规范&#xff0c;我们的JVM内存模型可以拆分为&#xff1a;程序计数器、Java虚拟机栈、堆、元空间、本地方法栈&#xff0c;还有一部分叫直接内存&#xff0c;属于操作系统的本地内存&#xff0c;也是可以直接操作的。 详细解释一下 程…...

【计算机网络】HTTP与HTTPS

文章目录 1. HTTP定义2. HTTP交互3. HTTP报文格式3.1 抓包工具-fiddler3.2 抓包操作3.3 报文格式3.3.1 请求报文3.3.2 响应报文 4. URL5. 请求头中的方法6. GET和POST的区别7. HTTP报头7.1 Host7.2 Content_Length7.3 Content_Type7.4 User-Agent(UA)7.5 Referer7.6 Cookie 8 状…...

数据结构:树的5种存储方案详解(C语言完整实现)

数据结构中的树结构常用来存储逻辑关系为 "一对多" 的数据。树结构可以细分为两类&#xff0c;分别是二叉树和非二叉树&#xff08;普通树&#xff09;&#xff0c;存储它们的方案是不一样的&#xff1a; 二叉树的存储方案有 2 种&#xff0c;既可以用顺序表存储二叉…...

【蓝桥杯】 枚举和模拟练习题

系列文章目录 蓝桥杯例题 枚举和模拟 文章目录 系列文章目录前言一、好数&#xff1a; 题目参考&#xff1a;核心思想&#xff1a;代码实现&#xff1a; 二、艺术与篮球&#xff1a; 题目参考&#xff1a;核心思想&#xff1a;代码实现: 总结 前言 今天距离蓝桥杯还有13天&…...

WebGL图形编程实战【3】:矩阵操控 × 从二维到三维的跨越

上一篇文章&#xff1a;WebGL图形编程实战【2】&#xff1a;动态着色 纹理贴图技术揭秘 仓库地址&#xff1a;github…、gitee… 矩阵操控 矩阵变换 回到前面关于平移缩放、旋转的例子当中&#xff0c;我们是通过改变传递进去的xy的值来改变的。 在进行基础变换的时候&…...

如何把数据从SQLite迁移到PostgreSQL

## 如何把数据从SQLite迁移到PostgreSQL 文章目录 1、DB-Engines 中的SQLite 和 PostgreSQL2、SQLite安装和测试2.1、编译安装SQLite2.2、数据测试 3、Postgresql安装和测试3.1、编译安装postgresql3.2、测试 4、pgloader安装5、数据迁移和验证5.1、准备参数文件5.2、数据迁移…...

Qt使用QGraphicsView绘制线路图————附带详细实现代码

文章目录 0 效果1 核心1.1 简单示例1.1.1 解读 1.2 创建用户交互1.2.1 完整示例 1.3 创建图形元1.3.1 绘制直线1.3.2 绘制贝塞尔曲线1.3.3 绘制图片 1.4 移动的小车 2 使用自定义视图类参考 0 效果 视图中包含线路、道岔、信号灯、火车。 下图为站点信号灯&#xff1a; 下图…...

【系统性偏见:AI照出的文明暗伤与生存悖论】

系统性偏见&#xff1a;AI照出的文明暗伤与生存悖论 第一层&#xff1a;偏见如何从数据中“遗传” 当某科技公司用十年招聘数据训练AI筛选简历时&#xff0c;系统悄然学会&#xff1a;提到"女性工程师协会"的简历&#xff0c;获得面试的概率自动下降37%——这相当于…...

【Linux】调试器——gdb使用

目录 一、预备知识 二、常用指令 三、调试技巧 &#xff08;一&#xff09;监视变量的变化指令 watch &#xff08;二&#xff09;更改指定变量的值 set var 正文 一、预备知识 程序的发布形式有两种&#xff0c;debug和release模式&#xff0c;Linux gcc/g出来的二进制…...

【数据分享】2000—2024年我国乡镇的逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)

之前我们分享过2000-2024年我国逐年的归一化植被指数&#xff08;NDVI&#xff09;栅格数据&#xff0c;该逐年数据是取的当年月归一化植被指数&#xff08;NDVI&#xff09;的年最大值&#xff01;另外&#xff0c;我们基于此年度栅格数据按照行政区划取平均值&#xff0c;得到…...

Shell 不神秘:拆解 Linux 命令行的逻辑与效率

初始shell shell的概述 什么是shell 本质 shell本质是脚本文件&#xff1a;完成批处理。 比如 有一个文件 中十个文件&#xff0c;这十个文件中每个文件又有是个子文件&#xff0c;由人来处理&#xff0c;很麻烦&#xff0c;但如果写一个脚本文件&#xff0c;让脚本来替我…...

win 远程 ubuntu 服务器 安装图形界面

远程结果&#xff1a;无法使用docker环境使用此方法 注意要写IP和:数字 在 ubuntu 服务器上安装如下&#xff1a; # 安装 sudo apt-get install tightvncserver # 卸载 sudo apt purge tightvncserver sudo apt autoremove#安装缺失的字体包&#xff1a; sudo apt update s…...

大模型高质量rag构建:A Cheat Sheet and Some Recipes For Building Advanced RAG

原文&#xff1a;A Cheat Sheet and Some Recipes For Building Advanced RAG — LlamaIndex - Build Knowledge Assistants over your Enterprise DataLlamaIndex is a simple, flexible framework for building knowledge assistants using LLMs connected to your enterpris…...

【Qt】游戏场景和图元

一&#xff1a;图元 advance函数&#xff1a; 在 Qt 框架里&#xff0c;QGraphicsItem 是用于在 QGraphicsScene 中绘制图形项的基类。advance(int phase) 是 QGraphicsItem 类的一个虚函数&#xff0c;其主要用途是让图形项在场景的动画或更新过程里完成特定的逻辑操作。 p…...

C++位运算精要:高效解题的利器

引言 在算法竞赛和底层开发中&#xff0c;位运算&#xff08;Bit Manipulation&#xff09;因其极高的执行效率而广受青睐。它能在O(1)时间复杂度内完成某些复杂操作&#xff0c;大幅优化程序性能。本文系统梳理C位运算的核心技巧&#xff0c;涵盖基础操作、经典应用、优化策略…...

几种常见的.NET单元测试模拟框架介绍

目录 1. Moq 2. NSubstitute 3. AutoFixture 4. FakeItEasy 总结对比 单元测试模拟框架是一种在软件开发中用于辅助单元测试的工具。 它的主要作用是创建模拟对象来替代真实对象进行测试。在单元测试中&#xff0c;被测试的代码可能依赖于其他组件或服务&#xff0c;如数…...

开源的CMS建站系统可以随便用吗?有什么需要注意的?

开源CMS建站系统虽然具有许多优点&#xff0c;但并非完全“随便用”。无论选哪个CMS系统&#xff0c;大家在使用的时候&#xff0c;可以尽可能地多注意以下几点&#xff1a; 1、版权问题 了解开源许可证&#xff1a;不同的开源CMS系统采用不同的开源许可证&#xff0c;如GPL、…...

初始ARM

ARM最基础的组成单元。 最小系统&#xff1a;能系统能够正常工作的最少器件构成的系统 。 一、CPU基础定义 1. 核心定位 计算机三大核心部件&#xff1a; CPU&#xff08;运算与控制&#xff09;内部存储器&#xff08;数据存储&#xff09;输入/输出设备&#xff08;数据交互…...

vue配置.eslintrc、.prettierrc详解

一、eslint简介 ESLint 是一个用于识别和报告 JavaScript 代码中潜在问题的静态代码分析工具。它可以帮助开发人员和团队维护一致的代码风格&#xff0c;减少错误&#xff0c;并确保代码质量。以下是 ESLint 的一些关键特点和功能&#xff1a; 1.静态代码分析&#xff1a;ESLi…...

DataPlatter:利用最少成本数据提升机器人操控的泛化能力

25年3月来自中科院计算所的论文“DataPlatter: Boosting Robotic Manipulation Generalization with Minimal Costly Data”。 视觉-语言-动作 (VLA) 模型在具身人工智能中的应用日益广泛&#xff0c;这加剧对多样化操作演示的需求。然而&#xff0c;数据收集的高成本往往导致…...

诠视科技MR眼镜如何安装apk应用

诠视科技MR眼镜如何安装apk应用 1、使用adb工具安装1.1 adb工具下载1.2 解压adb文件1.3 使用adb安装apk1.4 常用adb命令 2、拷贝到文件夹安装 1、使用adb工具安装 1.1 adb工具下载 点击下面的链接开始下载adb工具&#xff0c;下载结束以后解压文件。 下载链接: https://down…...

3.31Python有关文件操作

1.复制文件 import os from shutil ipmort copy,copytreepath os.path.join(os.getcwd(),test1.txt) target_path os.path.join(os.getcwd(),test1copy)copy(path,target_path) copytree(path,target_path) 注意&#xff1a;test1.txt 和 test1copy 文件夹/包 都点存在 …...