一、动态规划的基本思想
动态规划:适用于子问题不是独立的情况,也就是各子问题包含公共的子问题,鉴于会重复的求解各子问题,DP对每个问题只求解一遍,将其保存在一张表中,从而避免重复计算。注意 :用动态规划解决问题,主要是要找到状态转移方程;
二、动态规划的基本步骤:
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。
动态规划算法的设计可以分为四个步骤:
①.描述最优解的结构。
②.递归定义最优解的值。
③.按自底而上的方式计算最优解的值。
④.由计算出的结果创造一个最优解。
三、动态规划问题的特征:
动态规划算法的有效性依赖于问题本身所具有的两个重要性质:
1、最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。
2、重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解
有名的数塔问题:http://acm.hdu.edu.cn/showproblem.php?pid=2084
我们知道,在求解的过程中,很多元素的值都算了不止一次,所有我们可以开个数组把这些已经计算出来的中间值保存下来。
这就是编程的又一大原则:以空间换时间。
我们把原来的数塔保存入一个二维数组num[n][n]里
状态转移方程是:
dp[i][j] = num[i][j] + max(dp[i+1][j], dp[i+1][j+1]) (i < n)
dp[i][j] = dp[i][j] (i = n)
最后我们输出dp[0][0]就可以了。
代码:
总结:
如果各个子问题不是独立的(与分治的不同之处),不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。由此而来的基本思路是,用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。
分享到:
相关推荐
动态规划 可以直接运行的c语言动态规划思想 代码动态规划 可以直接运行的c语言动态规划思想 代码动态规划 可以直接运行的c语言动态规划思想 代码动态规划 可以直接运行的c语言动态规划思想 代码动态规划 可以直接...
动态规划思想的介绍(矩阵连乘问题,最长公共子序列,流水线作业调度问题,0-1背包问题)。算法课使用的ppt,可结合我的博客算法专栏一起看。有详细代码。
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解...动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解
本文讨论了动态规划这一思想的核心内容和其基本特点,探讨了动态规划思想的适用范围,动态规划子问题空间和递推关系式确立的一般思路。通过例子说明在子问题确立过程中的一些问题的解决办法:通过加强命题或适当调节...
动态规划是解决多阶段决策最优化问题的一种思想方法。...动态规划思想近来在各类型信息学竞赛中频繁出现,它的应用也越来越受人重视。本文就是讨论如何运用动态规划的思想设计出有效的数学模型来解决问题。
动态规划ppt 动态规划ppt动态规划ppt
枚举、搜索与动态规划试题精讲 动态规划是解决多阶段决策最优化问题...使用动态规划思想来设计算法,对于不少问题往往具有高时效,因而,对于能够使用动态程序设计思想来解决的问题,使用动态规划是比较明智的选择。
若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子...
一个算法中的经典问题,求最长回文子串问题,其实是可以归于二维动态规划问题。 对于给定的一个字符串中,找到这个字符串中的回文子串,回文子串的概念是从前往后正向的读和从后往前反向的读都是完全相同的字符串。
基于MATLAB平台,用动态规划法解决0-1背包问题,较为简单。参数分别为[物品重量,物品价值,背包容量,背包价值]
对动态规划有着比较详细的讲解,比如动态规划的一般步骤,动态规划的思想
摘要视图订阅登录 | 注册195897次第4587名57篇33篇0篇117条0020算法笔记——【动态规划】最优二叉搜索树问题 liufeng_king的专
动态规划的实现,简单源代码,体会动态规划思想
本次课程论文,针对ACM比赛中的经典算法,动态规划,进行了详细的讲述,并以ZOJ和POJ上的经典题目为例,讲述了动态规划算法的应用。
1、了解什么是动态规划 2、斐波那契、爬楼梯、跳台阶等入门动态规划思想详细讲解 3、LCS、LIS等经典动态规划问题详解 4、打家劫舍系列问题分析 5、买卖股票最佳时间问题分析
应用动态规划算法思想求解矩阵连乘的顺序问题。 【实验性质】 验证性实验(学时数:2H) 【实验要求】 应用动态规划算法的最优子结构性质和子问题重叠性质求解此问题。分析动态规划算法的基本思想,应用动态规划策略...
关于01背包问题的程序,所用的是动态规划思想
动态规划思想原理及说明,其中有经典的例子:背包问题、最优三角....
利用动态规划思想求素数,线性时间内即可求解,可以处理指定数字()下的所有质因数
Dynamic Programming动态规划方法采用最优原则来建立用于计算最优解的递归式,并且考察每个最优决策序列中是否包含一个最优子序列,这里我们就来展示C语言使用DP动态规划思想解最大K乘积与乘积最大问题