DP水题解题思想+算法代码

估计大家可以对DP有一定的了解了,首先我要在这里明确DP绝对不是算法,我们可以姑且给它看成是搜索的优化,我们需要知道的是,木有重叠子问题,就不是D家小P(不是DP),子问题不独立一般也不是D家小P.木有边界,那是死循环.
额..好吧,有人问我虾米是重叠子问题,重叠子问题不是和子问题独立相矛盾了么?

不然,重叠子问题是指 我在节点4时的状态和节点1时的状态所要解决的问题是一样的,就是下面哪个货是最大的.so这类的就叫重叠字问题
而所谓的子问题的独立性是指,在4节点时选择7还是8 和在5节点选择8还是9 这两个子问题是相互独立互不干扰.
最优子结构 是指子问题最优那么母问题通过优化保证最优.
if(问题[含有重叠子问题]  && 问题[子问题独立] && 问题[有边界] && 问题[最优子问题]){
    问题 = DP;
}

DP--重叠子问题(这一类题是DP中比较基础,但是却是很靠近DP)
就重叠子问题而言,我们需要将重复的步骤"砍掉",其解决方法:我们可以用标记数组标记一下已解决的问题
注:某些时刻我们不知道一道题是否属于DP类型,或者这道题是一道模拟题或者找规律题,我们都可以用打表的方式按题意要求将题目答案解除(时间复杂度很高)将其规律找到后再去求解,以HDU1579为例,这就是一道典型的重叠子问题类型的DP题

数塔: HUOJ2084 POJ3176 http://acm.hdu.edu.cn/showproblem.php?pid=2084
一个数字三角形, 形式如下:
  1
  2 3
  4 5 6
  7 8 9 10
找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大.
这是一道灰常经典也灰常入门的DP问题

这里我们来计算它的最大值

DP水题解题思想+算法代码 



从底层往上走:                   //为什么我们不是从最后一层开始走,因为我们运用递归,故此必须从倒数第二层开始走
第1步
  到4结点状态:4+max{7,8}=12
  到5结点状态:5+max{8,9}=14
  到6结点状态:6+min{9,10}=16
第2步
  到2结点状态:2+max{12,14}=16
  到3结点状态:3+max{14,16}=19
  .
  .
  .
如此反复一直到顶端.
f(i,j)的状态(到达i最大值)只与它下层 f(i+1,j) f(i+1,j+1)的状态(到达i+1最大值)有关
所谓的状态转移,就是根据f(i+1,j) f(i+1,j+1)的状态转移到f(i,j)的状态
dp是以空间换时间的算法,保存了大量的中间结果..

动态转移方程 : f(i, j)=a[i, j] + max( f(i-1, j),f(i-1, j - 1) ) ;    //自底向上的方式计算最优解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值