动态规划模板——Python版本

手把手教你用Python搞定华为OD在线OJ:环境、输入输出与常见题型解析 本文详细介绍了如何用Python应对华为OD在线笔试,包括环境配置、输入输出处理及高频题型解析。重点讲解了Chrome浏览器设置、Python输入输出技巧以及动态规划、字符串处理等常见题型的解题模板,帮助考生在笔试中高效发挥。 阅读详情

此文是来自 https://leetcode.com/discuss/general-discussion/458695/Dynamic-Programming-Patterns 这位外国网友,本人负责汉化

目录

一、达到目标的最小(最大)路径型问题

二、不同的方式

三、合并区间

四、字符串DP问题

四、做决策问题


一、达到目标的最小(最大)路径型问题

此类问题的描述为:给定目标,找到达到目标的最小(最大)成本(cost)/路径(path)/总和 (sum)。

通用模板代码为:

for i in range(1,target+1):
    for j in range(len(ways)):# ways:达到目标的方法个数
        if ways[i]<=i:
            dp[i] = min(dp[i], dp[i - ways[j]] + 代价(cost) / 路径(path) / 总和(sum))
return dp[target]

类似的问题有:

  1. 使用最小花费爬楼梯
  2. 最小路径和
  3. 零钱兑换
  4. 下降路径最小和
  5. 最低票价
  6. 只有两个键的键盘

  7. 完全平方数

  8. Last Stone Weight II 

  9. Triangle 

  10. Ones and Zeroes 

  11. Maximal Square

  12. Coin Change

  13. Tiling a Rectangle with the Fewest Squares

  14. Dungeon Game

  15. Minimum Number of Refueling Stops 

二、不同的方式

此类问题的描述为:给定目标,找到达到目标的不同方式

通用模板代码为:

for i in range(1,target):
    for j in range(len(ways)):
        if ways[j]<=i:
            dp += dp[i-ways[j]]
return dp[target] 

类似的问题有:

  1. Climbing Stairs 
  2. Unique Paths 
  3. Number of Dice Rolls With Target Sum

还有一些问题指出了重复的次数,在这种情况下,还要增加一个循环来模拟每个重复。

  1. Knight Probability in Chessboard 
  2. Target Sum 
  3. Combination Sum IV 
  4. Knight Dialer 
  5. Dice Roll Simulation 
  6. Partition Equal Subset Sum 
  7. Soup Servings 
  8. Domino and Tromino Tiling
  9. Minimum Swaps To Make Sequences Increasing
  10. Number of Longest Increasing Subsequence 
  11. Unique Paths II
  12. Out of Boundary Paths 
  13. Number of Ways to Stay in the Same Place After Some Steps 
  14. Count Vowels Permutation 

三、合并区间

此类问题的描述为:给定一组数字来获得的最佳值,可以从当前数字以及它左侧或者右侧的数字来找到解决问题的方法。

通用模板代码为:

for l in range(1,n):
    for i in range(n-l):
        j = i+l
        for k in range(i,j):
            dp[i][j] = max(dp[i][j], dp[i][k] + result[k] + dp[k+1][j])
return dp[0][n-1]

类似的问题有:

  1. Minimum Cost Tree From Leaf Values
  2. Unique Binary Search Trees
  3. Minimum Score Triangulation of Polygon 
  4. Remove Boxes 
  5. Minimum Cost to Merge Stones 
  6. Burst Balloons 
  7. Guess Number Higher or Lower II

四、字符串DP问题

此类问题的描述为:给定两个字符串s1和s2,返回一些结果

通用模板代码为:

/**
i : 字符串s1的下标
j : 字符串s2的下标
**/
for i in range(1,n+1):
    for j in range(1,m+1):
        if s1[i-1] == s2[j-1]:
            dp[i][j] = #code....#
        else:
            dp[i][j] = #code....#

如果自给一个字符串的话,方法几乎不变:

for l in range(1,n):
    for i in range(n-l):
        j = i+l
        if s[i] == s[j]:
            dp[i][j] = /*code*/
        else:
            dp[i][j] = /*code*/

类似的问题有:

  1. Longest Common Subsequence 
  2. Palindromic Substrings
  3.  Longest Palindromic Subsequence 
  4. Shortest Common Supersequence 
  5. Edit Distance
  6. Distinct Subsequences 
  7. Minimum ASCII Delete Sum for Two Strings
  8. Longest Palindromic Substring

四、做决策问题

问题描述:给定一组值,找到答案,并提供选择或忽略当前值的选项

通用模板代码:

#i: 一组值的下标
#j: 忽略j值的选项
for i in range(1,n):
    for j in range(1,k+1):
        dp[i][j] = max(dp[i][j], dp[i-1][j] + arr[i], dp[i-1][j-1])
        dp[i][j-1] = max(dp[i][j-1], dp[i-1][j-1] + arr[i], arr[i])
        

类似的问题有:

  1. House Robber 
  2. Best Time to Buy and Sell Stock
  3. Best Time to Buy and Sell Stock with Transaction Fee
  4. Best Time to Buy and Sell Stock with Cooldown 
  5. Best Time to Buy and Sell Stock III 
  6. Best Time to Buy and Sell Stock IV 

其实很多问题不用动态规划的方法也可以做出,这里只是把类似问题的解法给总结一下

Python3本地力扣刷题环境搭建与优化指南 算法刷题是提升编程能力的有效途径,而本地开发环境能显著提高刷题效率。Python作为主流编程语言,其丰富的工具链支持从代码格式化到自动化测试的全流程。通过VS Code集成LeetCode插件,开发者可以实现题目分类管理、智能提示和自定义测试用例。本文详细介绍如何搭建Python3专属的力扣刷题环境,包含虚拟环境配置、VS Code优化设置、高频算法模板库等核心要素。特别针对二分查找、动态规划等高频算法题,提供可直接复用的代码模板和性能优化技巧。这套方案已通过500+力扣题目实战验证,尤其适合需要系统提升算 阅读详情

相关推荐

递归和动态规划(Python)

递归和动态规划在解题上有何相似之处,为什么将递归和动态规划放在一起。在这里你将找到答案,这可能是你能够找到动态规划和递归的全网最详细、最基础的文章。

weixin_44986581的博客 1443

6.Python之动态规划

动态规划(DP)的思想 = 最优子结构(递推式)+ 重复子问题(把子问题的计算结果存起来。后面子问题直接拿前面的来用。递归算法由于重复求解相同子问题,效率极低。

Emily的博客 957

Python————动态规划

文章目录动态规划一、动态规划二、动态规划之Fib数列问题描述思路分析代码实现三、任务安排问题代码实现四、不相邻树最大和问题描述:代码实现: 动态规划 一、动态规划 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。 科技公司面试必考算法 题目类型多, 没有固定的模板 难度属于中上 二、动态规划之...

weixin_41460135的博客 2012

python 实现动态规划

程序输出了最大价值以及选择的物品索引,使用二维数组 dp 来存储子问题的最优解,其中 dp[i][j] 表示在考虑前 i 个物品,且背包容量为 j 的情况下的最优解。step 3:边缘状态构造好以后,遍历矩阵,补全矩阵中每个位置的dp数组值:如果当前的位置是(i,j),上一步要么是(i−1,j)往下,要么就是(i,j−1)往右,那么取其中较小值与当前位置的值相加就是到当前位置的最小路径和,因此状态转移公式为dp[i][j]=min(dp[i−1][j],dp[i][j−1])+matrix[i][j]

liulanba的博客 1万+

Python算法模板:面试刷题必备的二分查找、并查集与动态规划代码底稿

算法与数据结构是技术面试和编程竞赛的核心基础,其关键在于将常见问题抽象为可复用的代码模式。通过预置边界处理与优化策略,算法模板能显著降低手写代码时的出错率,提升解题效率。在二分查找、并查集、图论遍历和动态规划等高频场景中,模板化实现可帮助开发者在面试压力下稳定输出正确代码。本文整理的Python算法模板集覆盖排序、双指针、回溯等模块,每个模板均提供可直接运行的实现与测试用例,适用于技术面试准备与在线判题系统实战。

weixin_33552698的博客 107

蓝桥杯Python算法题解集:从递归到动态规划的全攻略

算法竞赛中,Python凭借简洁语法和丰富库函数逐渐成为主流选择。理解递归、贪心、动态规划等核心算法思想,是解决复杂问题的关键。对参赛者而言,一份高质量的题解集不仅提供可运行的代码,更应讲清状态定义、转移方程与边界处理。本文以蓝桥杯备赛为背景,拆解一份覆盖递归、搜索、DP、图论等题型的Python题解集,从环境配置到代码模板,从复杂度分析到对拍器验证,帮助读者快速掌握竞赛常用套路,高效提升解题效率。

weixin_32288959的博客 194

动态规划-python版本

1、真题 (1)斐波那契数列 # -*- coding:utf-8 -*- def fib(n): """ 递归方式实现斐波那契数列---时间复杂度O(2^n),空间复杂度O(n) :param n: :return: """ if n < 2: return n else: return fib(n-1) + fib(n-2) def fib1(n): """ dp方式实现斐波那契数

chenchen_nini的博客 564

蓝桥杯Python组备考:真题刷题顺序与高频题型避坑指南

在编程竞赛备赛过程中,很多选手容易陷入“刷题量决定成绩”的误区,却忽略了更核心的环节——如何科学地整理与使用真题资源。算法学习与竞赛训练的本质,是通过理解题目背后的原理,建立从知识点到解题策略的映射关系。以蓝桥杯Python组为例,省赛与国赛的难度分层明显,真题的价值不在于全部刷完,而在于按照难度与知识点合理排序,结合动态规划、DFS、贪心等高频算法的模板化训练,形成可复用的解题能力。同时,针对多组数据读取、递归深度、版本兼容等Python特有的踩坑点,提前规避能显著提升考场稳定性。本文从通用算法学习路径切

weixin_33585822的博客 278

python数据结构与算法-动态规划(最长公共子序列)

python数据结构与算法

little_limin的博客 3527

Xilinx IP库在Modelsim/Questasim中的高效仿真实践

本文详细介绍了在Modelsim/Questasim中高效仿真Xilinx FPGA设计的核心方法。针对仿真时常见的IP核缺失错误,重点解析了两种主流解决方案:使用Vivado的compile_simlib命令自动编译完整仿真库,以及利用export_simulation命令为特定工程生成仿真脚本。文章还提供了手动配置库的深入理解、实战排错步骤及高级避坑指南,帮助用户构建稳定、高效的独立仿真环境。

sony5的博客 1229

matlab kwave模拟超声换能器学习笔记

kwave模拟超声换能器的学习笔记,从零开始造车轮

SolvingMaster的博客 3197

动态规划(Python)

动态规划学习笔记

1 6050

WindTerm 安装使用教程

WindTerm是一款Github上开源的 SSH 终端工具,它是完全可以比肩MobaXterm工具的。

m0_69576880的博客 4024

蓝桥杯Python国赛线上环境与算法思维全解析

算法竞赛是检验编程能力与计算思维的重要方式,其核心在于将实际问题抽象为计算模型,并运用高效的数据结构与算法求解。动态规划、深度优先搜索等经典算法是解决复杂问题的关键,它们通过状态转移或系统化搜索来优化求解过程,在资源分配、路径规划等场景中具有极高的技术价值。对于线上竞赛环境,考生需特别关注Python解释器版本差异、标准库的纯净性以及输入输出流处理,这些因素直接影响代码的兼容性与正确性。本文以蓝桥杯Python国赛为例,深入剖析线上考试环境的特点与陷阱,并结合高频考点如动态规划、深度优先搜索,系统讲解从问题

weixin_30702441的博客 217

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2395

华为OD机试 - 战士技能规划设计 - 数组(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。你为一款动作游戏设计战士角色的技能:战士每个技能会消耗不同能量,释放技能有 2 个约束:连续释放技能数量不能超过 m 个,技能能量总和不能超过能量上限 k;如果超过则必须中断当前技能,进入调息状态(即分段)。战士有一项爆发技巧:在单次战斗中有一次

学Java,找哪吒 227

【算法模板】动态规划,Python开发社招面试总结

在上面我们已经知道了什么是DP了,那么什么又是一维DP呢?通常的讲一维DP就是通过一维的数组来满足推导公式的一个求解。//则表示创建了一个长度为10的一维DP数组。//例如:推导公式dp[i] = max(dp[i - 2] + dp[i - 1] , dp[i])//这个就是一个比较简单的一维DP推导公式!

m0_60635609的博客 760

ABAP ALV 导出总被锁死为固定格式?把 Always Use Selected Format 一键重置到可选状态

摘要:SAP ALV报表导出时勾选"Always Use Selected Format"会导致导出格式被锁定,无法切换格式。文章分析该问题原因(系统持久化配置),提供用户自助解法(ALV list使用&RESET_EXCEL命令码,ALV grid通过右键菜单恢复弹窗),管理员治理方案(使用SALV_BS_ADMIN_MAINTAIN报表批量处理),并指出SAP_BASIS 7.02版本的特殊处理方式(需参考SAP Note 1716802和1590484)。最后给出排障清单,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板

dp动态规划 = 找到最优子结构 + 记住子问题解定义状态dp[i]是什么意思?状态转移dp[i]怎么从dp[i-1]算出来?初始化dp[0]是多少?遍历for循环怎么写?通过这个框架,你就可以把一个大问题分解成一系列清晰、可执行的步骤,从而系统地解决它。

突围 880

【YOLOv11多模态涨点改进】独家创新首发| TGRS 2026 |引入 CIFusion 通道交互融合模块,通过跨特征交互机制强化目标区域响应,适合多模态融合目标检测,小目标检测高效涨点

🔥本文提出了一种改进YOLOv11多模态目标检测模型的方法,通过引入CIFusion通道交互融合模块来提升RGB与红外特征融合效果。CIF模块采用通道级自适应交互机制,根据全局上下文动态分配不同模态通道的重要性,实现跨模态特征交互与互补信息融合。相比传统拼接或加权融合方式,CIF能够增强目标区域响应,抑制背景噪声,提高小目标和低对比度目标的检测性能。实验表明,该方法在DroneVehicle等数据集上显著提升了检测精度。论文还详细介绍了CIF模块的结构原理、实现代码及模型配置方法。

Ai缝合怪、助力小伙伴高效发论文 186

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 209

【算法模板】动态规划(基础DP篇),Python笔试面试题

在上面我们已经知道了什么是DP了,那么什么又是一维DP呢?通常的讲一维DP就是通过一维的数组来满足推导公式的一个求解。//则表示创建了一个长度为10的一维DP数组。//例如:推导公式dp[i] = max(dp[i - 2] + dp[i - 1] , dp[i])//这个就是一个比较简单的一维DP推导公式!

2401_84138890的博客 916

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【算法】动态规划专题⑥ —— 完全背包问题 python

完全背包问题是动态规划中的一种经典问题,它与0-1背包问题相似,但有一个关键的区别:在完全背包问题中,每种物品都有无限的数量可用。也就是说,你可以选择同一种物品多次放入背包,以使背包中的总价值最大。

查理零世的博客 5593

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python动态规划

动态规划 动态规划 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。 科技公司面试必考算法 题目类型多, 没有固定的模板 难度属于中上 动态规划之Fib数列 问题描述 有个小孩上楼梯,共有N阶楼梯,小孩一次可以上1阶,2阶。走到N阶楼梯,一共有多少种走法? 思路分析 DP之自顶向下分析方式: 爬到第N阶楼梯,...

weixin_41572488的博客 1106

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝桥杯Python A组省赛复盘:动态规划、搜索与并查集模板

算法竞赛中,动态规划和搜索是解决许多复杂问题的基础。动态规划通过定义状态与转移方程,将大问题拆解为可递推的子问题;搜索则借助方向数组、访问标记与剪枝策略,在状态空间中高效求解迷宫最短路径或连通块问题。掌握这些核心算法的原理,不仅能提升代码运行效率,更能提高竞赛中的得分稳定性。实际应用中,像蓝桥杯这类限时编程比赛,选手还需熟悉并查集、素数筛、进制转换等高频模板,并善用Python内置库与批量输入输出技巧,以应对大数据量场景。本文基于蓝桥杯Python大学A组省赛复盘,汇总了动态规划、搜索、并查集等高频题型模板

weixin_34347651的博客 541

(python)动态规划

曾经有一位叫做小明的年轻人,他生活在一个被困在连绵不断的山脉中的村庄里。这座村庄每年都会受到洪水的威胁,而村民们只能通过一条崎岖而危险的小路逃离洪水的侵袭。小明决定解决这个问题。他花了很长时间研究了地形图和洪水的模式,最终他发现了一种方法:他可以在山脚下建造一条巨大的堤坝,当洪水来临时,它将会拦截洪水并将其引导到一个安全的区域。但是,建造堤坝需要花费大量的金钱和人力,而小明的村庄资源有限。于是,他开始思考如何以最少的成本建造堤坝。小明意识到这其实是一个的问题。他将整个过程分解成了一系列。

MARST.ZHANG的博客 1612
上一篇: 关于回文的常见题目
下一篇: Python实现笛卡尔乘积的几种方法
烟雨人长安
博客等级 码龄10年 871粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值