几个动态规划的常见例题

动态规划:字符串系列 当遇见两个字符串s,t的动态规划问题时候,通常使用二维数组表示分别取两个字符串中的第i个元素和第j个元素,并根据s[i] == t[j]来选择不同的递推公式 一、动态规划:子序列 1、最长递增子序列(非连续) 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组[0,3,1,6,2,2,7] 的子序列。 1)dp数组 dp[i]为以元素nums[i]结尾的最 阅读详情

1.LIS(Longest increase string)

( 3,-1,2,4,9,6)
LIS的考虑是当前点和前面最长递增子序列的最大值比较或者与次最长递增子序列的最大值比较或者与次次最长递增子序列的最大值比较。。。。。。这时的复杂度为O(n^2)。倘若用二分法查找这个“合适的最长递增子序列最大值”,复杂度可以降为O(nlogn)。


2. 最大子段和

这问题一般考虑有四种解法。第一种解法的复杂度为O(n^3),考虑为:一个控制头,一个控制尾,一个遍历操作。这是比较直观的考虑,很多问题都可以用这种方法来解。(比如最大子段积)

解法二的复杂度为O(n^2)。考虑从方法一而来。由于本体的特殊性(连续加是和),可以在控制尾的时候,同时进行遍历求值。

解法三是基于分治法的考虑。考虑到整个序列的最大和要不在左半段,要不在右半段,要不跨越左右半段。关键在于跨域部分的求解。可以分别求包含n/2的最大左半段和包含n+1/2的最大右半段和相加就可以了。
关于包含某值的特定方向的最大和,是容易求的。同时这个结论也是支撑方法四的核心。

解法四的复杂度是线性时间。对于这个问题,能想出线性解法的人,我们应该称之为神。一般的考虑是看前最大子段和i个元素的最大子段和与前i+1个的有什么联系,想了好长时间,原来没什么联系。
正确的解法是分别求包含i结点的前i个元素的最大子段和,这样的话,最大值总在其中。(遍历i时)
废话少说,看转移方程:
b[i]意思是前i个元素的最大子段和(包含i结点)
如果b[i-1]>0 b[i]=b[i-1]+arry[i]
如果b[i-1]<=0 b[i]= arry[i]


3. LCS
经典之中的经典问题,基本上每本算法书上的DP章节都拿来作镇山之宝。
初观此题,我简直不敢相信能够求解,当看到复杂度如此低而又直观的解法,直接拜地叹服。
略去废话,看状态转移方程
0 (i=0,j=0)
Dp(i,j)= dp(i-1,j-1)+1 (i,j>0;Xi=Yj)
Max{ dp(i,j-1) , dp(i-1,j)} ( i,j>0;Xi!=Y)



4. 01背包问题

01背包是i问题和i+1问题间的联系,那么毋庸我废话,状态方程就可以表示一切了。
背包的容量为j,可选择的物品为i,i+1,….n时
Dp(i,j)= Max{ dp(i+1,j) , dp(i+1,j-w[i])+v[i] } (j>=w[i])
dp(i+1,j) (0<j<w[i])

5. 数组分割问题
有个没有排序,元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个字数组的和最接近?
解:假设S=(a[1]+a[2]+...+a[n]+a[n+1]+...+a[2n])/2,
那么这是个和0-1背包类似的动态规划问题,区别之处就是取的个数受到限制,必须得取足n个元素。

用dp(i,j,c)来表示从前i个元素中取j个、且这j个元素之和不超过c的最佳(大)方案,在这里i>=j,c <=S
状态转移方程:
dp(i,j,c)=max{dp(i-1,j-1,c-a[i]),dp(i-1,j,c)}
dp(2n,n,S)就是题目的解。


来自:http://www.cnblogs.com/dmesg/archive/2009/07/31/1535772.html

动态规划(DP)(细致讲解+例题分析) 本章将介绍介绍动态规划(Dynamic Programming, DP)及其解决的问题、根据其设计的算法及优化。动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。由于动态规划并不是某种具体的算法,而是一种解决特定问题的方法,因此它会出现在各式各样的数据结构中,与之相关的题目种类也更为繁杂。在 OI 中,计数等非最优化问题的递推解法也常被不规范地称作 DP,因此本章将它们一并列出。事实上,动态规划与其它类型的递推的确有很多相似之处,学习时可以注意它们之间的异同。 阅读详情

相关推荐

《动态规划》— ACM 动态规划例题详解

描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。 输入 输入的是一行是一个整数N (1 &...

69小石头的博客 1620

动态规划经典例题之详细解说

一 什么是动态规划 动态规划(Dynamic Programming,DP)是一种解决一类最优问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样但下一次碰到同样的子问题时,既可以直接使用之前纪录的结果,而不是重复计算。注意:虽然动态规划采用这种方式提高计算效率,但是不...

zhimingdaye的博客 1405

数学建模动态规划matlab编程与例题精讲

这是我找了蛮久的 看完之后 你会对动态性规划有了比较深入的了解 也很适合初学者看 里面还结合了大量的例题与matlab的编程 所以说 如果你需要的话 你可以直接用里面的程序 然后直接改代码就可以啦!

动态规划算法经典例题_动态规划的经典模型

动态规划算法的核心就是记住已经解决过的子问题的解。记住求解的方式有两种:①自顶向下的备忘录法②自底向上。动态规划的经典模型线性模型线性模型的是动态规划中最常用的模型,上文讲到的钢条切割问题就是经典的线性模型,这里的线性指的是状态的排布是呈线性的。【例题1】是一个经典的面试题,我们将它作为线性模型的敲门砖。【例题1】在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过...

weixin_35774446的博客 1130

Matlab求解动态规划问题

Matlab求解动态规划问题,以具体的生产存货为问题背景为例

动态规划求字符串比较问题

《动态规划》之--字符串比较问题(扩展距离),主要思路通过策略和无效性来求解。特点最优子结构性质,重叠子问题。

动态规划问题经典例题

DP(Dynamic Programming)定义: 动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。 动态规划具备了以下三个特点: 把原来的问题分解成了几个相似的子问题。 所有的子问题都只需要解决一次。 储存子问题的解 动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态

dddddrrrzz的博客 8192

黑白棋子 进程管理问题

 生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:   (1)进程A专门拣黑子,进程B专门拣白子;   (2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子;

动规之字符串的应用【力扣】

本文写的是字符串问题之类的动规问题的简略解法以及思考(java)

xoliu的博客 396

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 471

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 732

动态规划常见类型总结

本文针对动态规划的常见类型进行总结。虽说总结的是动态规划,但顺便把递推也放了进来。严格来说,递推不属于动态规划问题,因为动态规划不仅有递推过程,还要有决策(即取最优),但广义的动态规划是可以包含递推的,递推是一类简单的、特殊的动态规划,毕竟动态规划与递推密不可分。动态规划类型主要分为纯粹动态规划问题和复合动态规划问题。 几点说明: 1、博主本人于2012年对信息学竞赛中的动态规划问题进行了总结...

FanJin的博客 2万+

智能体在车联网中的应用:第19天 智能体理论与初步实践 D30:阶段小结——在SUMO中使用TraCI控制预编程智能体

本文介绍了如何将强化学习从算法仿真迁移到交通系统实践,重点讲解了SUMO微观交通仿真平台与TraCI实时控制接口的架构。通过构建一个预编程驾驶智能体,演示了车辆从起点到目标点的导航控制。文章详细解析了TraCI的双向通信机制和事件驱动模型,对比了其与传统RL环境的差异,并提供了完整的Python实现框架,包括路网配置、车辆控制和基于向量场的导航逻辑。该实践为后续开发高级学习型交通智能体奠定了基础。

IT深耕十余载,大道之简 1482

动态规划算法典型例题

1. 动态规划之选数问题 题目要求: 假设给定一串数字{1, 2, 4, 1, 7, 8, 3},我们要从中选择若干个数,使最后的和达到最大。选择的规则是,不能选相邻的数字。比如:如果我们选了第一个数字1,那么我们就不能选2,如果我们选择了数字4,那么我们就不能选择与它相邻的2和1。 动态规划的思想:将整个问题划分成一个个子问题,也就是说要求整个数列的最大和,可以先求出前面若干个数的和,一直划分...

can_chen的博客 1万+

xctf攻防世界 MISC高手进阶区 low

1. 进入环境,下载附件 给出的一张bmp图片,没有其他信息 2. 问题分析 扔进binwalk中,没有发现有用信息 使用zsteg,没有有用信息 塞入StegSolve中,发现有点猫腻,如图: 有点二维码的感觉,emmm,需要像素处理,但不知道如何下手,参考网上的wp,发现是让使用lsb隐写,copy代码: from PIL import Image img = Image.open('./pic/low.bmp') img_tmp = img.copy() pix = img_tmp.load()

l8947943的博客 1万+

01-诊断开发流程概述

传送门 ==>> AutoSAR入门和实战系列总目录。

1787

动态规划经典例题

最长公共子序列(Longest Common Subsequence, LCS)问题是计算机科学中的一个经典问题,它要求找出两个序列(通常是字符串)的最长公共子序列,且要求子序列中的元素在原序列中是连续的。斐波那契数列定义为:F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2)。问题描述:给定两个字符串 str1 和 str2,求将 str1 转换为 str2 的最小编辑距离。问题描述:在一个二维矩阵中,从左上角到右下角,只能向右或向下移动,求路径的最小和。

weixin_43988686的博客 2729

【教程4>第4章>第22节】FFT频偏估计方法,导频+cordic频偏估计方法,costas环的性能对比

频偏范围适应性:Costas 环频偏锁定和基于 PN 导频和 CORDIC 算法的频偏估计都可以通过调整参数来适应一定范围的频偏,但 Costas 环的频率捕获范围相对较窄,而基于 PN 导频和 CORDIC 算法的频偏估计,基于 FFT 变换频偏估计对频偏范围较大。在高信噪比条件下,三种方法都可以获得较高的估计精度,但在低信噪比环境中,基于 PN 导频和 CORDIC 算法的频偏估计,基于 FFT 变换频偏估计这两个开环方案相对更具优势,而Costas 环频偏锁定的精度可能会受到较大影响.

FPGA/MATLAB学习教程/源码/项目合作开发 611

java 动态规划策略原理及例题

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做

往事散云烟,十寸光阴换一钱 1万+

QT控件 参考Qt的PIMPL设计模式实现使用QWidget控件绘制3D饼状图表和3D柱状图表,使用QChartView绘制圆柱体图表

工作中之前遇到了绘制3D饼状图表的需求,通过Qt 实现3维饼状图 一文,成功迅速解决问题,现在闲下来了,之前看QtTreePropertyBrowser库的源代码,就想着学习学习Qt的PIMPL模式,于是就参照PIMPL模式实现通过QWidget控件的paintEvent函数重新绘制3D饼状图表和3D柱状图表统计数据的显示效果, 而使用QChartView绘制圆柱体图表完全是取巧了,为了紧急完成工作采用的方法,实际上使用3D柱状图表显示统计数据更加合理。

... 728

Open3D(C++) 点云构建三维Delaunay三角剖分

C++版本的Open3D实现从点云构建三维Delaunay,可视化效果。

点云侠的博客 2247

【动态规划】算法例题

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶方法1:(用递归会超时)

QiAn的博客 1808

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

动态规划算法与典型例题

动态规划算法设计思路与一些典型例题,如长江游艇问题,0-1背包问题,跳台阶问题,强盗抢劫问题等

weixin_50431732的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

[算法]动态规划以及常见例题

之前买的假书害人捏......不过有个问题没说错,动态规划和递归很相似,但是动态规划利用分治法一个子任务的结果将储存避免对于同一个子任务的重复计算但其实根据某本书的写法,就是给递归套了一层存储的壳子......个人感觉这个做法不是很地道,递归可以理解为从上而下进行的,从大任务开始,然后等待着小任务的的返回结果确认大任务的值.而动态规划可以理解为自下而上进行的,先去计算小任务,再去计算大任务的结果关于转移方程:怎么从小任务里面推出大任务的方式。

weixin_62697030的博客 1484

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 单调递增最长子序列
下一篇: 邮票分你一半
java_oracle_c
博客等级 码龄13年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值