SDAU练习三总结

原创 2016年06月01日 12:53:06
 动态规划程序设计是对解最优化问题的一种途径,是解决多阶段决策问题的一种方法。在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解 题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。
 
    动态规划问题运算量比较大,在本套专题中遇到的DP问题类型:类斐波那契数列问题,01背包(以1019,1017题为例),完全背包(以1022题为例),最长升序子序列问题,最大公共子序列(以1002题为例)问题。
 
    类斐波那契数列问题,指特征方程类似于 f(n) = f(n-1) + f(n-2),的问题,此类问题最直观的题就是斐波那契数列,稍微难一点的就是跳楼问题,和堆砖头问题,这两个题虽然看起来与斐波那契没什么关系,但是经过分析和转化之后,就可以转化为该类型。总的来说,类斐波那契数列问题是这套专题里最简单的问题,只要做会了几个典型,其他的就很简单了。
 
    01背包,一般描述为给定背包的容积,一些物品的价值和体积,求能放入背包中的物品的最大价值,一个比较通用的公式为f[i, j] = max( f[i-1, j-Wi] + Pi (j >=Wi), f[i-1, j] ),这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..V]全部设为0。
 
    完全背包,这个问题非常类似于01背包问题,所不同的是每种物品有无限件,也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……取[V/c]件等很多种。
 
    最大公共子序列,又称LCS,由于上课老师没有讲过,便自己学习了一下,这类问题一般描述为给定一定个字符串,求出个个串最长的公共子序列的长度,这种问题的解决思路很巧妙,用一个矩阵,行和列每个格子代表一个字符,分别表示出两个字符串,如图,引进一个二维数组c[][],用c[i][j]记录X[i]与Y[j] 的LCS 的长度,b[i][j]记录c[i][j]是通过哪一个子问题的值求得的,以决定搜索的方向。我们是自底向上进行递推计算,那么在计算c[i,j]之前,c[i-1][j-1],c[i-1][j]与c[i][j-1]均已计算出来。此时我们根据X[i] = Y[j]还是X[i] != Y[j],就可以计算出c[i][j],即问题的解。

 
感想: 动态规划问题,代码量很少,一个贪心或者搜索问题,一般都会有五六十行代码,而一个DP问题的代码量,往往就十几行甚至更短,以至于真正的核心就那么一行递推公式。但这并不代表DP问题就简单,做DP问题需要很强的逻辑思维和思考能力,做DP问题,是真正用“脑子”做题,不是像搜索一样,靠“模板”来嵌套。 
心得:经过一段时间的刷题与适应,虽然最终的结果不尽如人意,但是在老师细心地讲解,自己也努力的求师求解,在豆豆的帮助下,也算是完成了这一阶段的学习,希望自己以后能更努力一点,天道酬勤!
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SDAU练习三 1003 棋子跳跃问题

                         &#...

SDAU 练习三 1024 商人与项目

Problem X Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total...

SDAU 练习三 1019 学院设备平分问题

Problem S Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total...

SDAU 练习三 1008 穿越大魔王的幽谷的问题

Problem H Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

2016SDAU课程练习一1004 E

Problem E Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total S...

SDAU 练习四1001 acm村庄建设最小长度问题

Problem A Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) There ar...

SDAU 练习四1002 acm 艾迪画墨水问题

Problem B Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

2016SDAU课程练习一Problem G

1题目编号:Problem G 2简单题意:(1)up一楼6s,down一楼4s,stop一楼5s。 (2)输入0时结束。3.解题思路形成过程:其一,由(2)知,需要对输入进行限...

SDAU 搜索专题 总结

这个专题主要有4个内容。 1:二分法。 找到最大值和最小值,取他们的中点mid。判断mid这个点的值,从而改变左端点或者右端点。一直重复此过程。 2:3分法。 和二分法类似,找到左端点和右端点...

SDAU 搜索专题 07 Cable master

1:问题描述 Problem Description Inhabitants of the Wonderland have decided to hold a regional programmi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)