随笔DP

动态规划:

  看到动态规划时,就像看到贪心一样,总感觉动态规划是一种和其名字很像的算法,研究到现在,对其有些浅显的认识,确实是在动态中完成求解,如何动态、规划!这两点似乎不是很好理解;在求解的时候动态从何而来,规划从何而来?个人观点是,动态规划在于数组,是把已经求出的解,放进数组,至于如何去放需要自己摸索;动态规划一大特征:最优子结构;利用这一最优子结构构成递归方程(注:学习动态规划之前,一定要弄清楚递归。最好自己能用递归最几个回溯之类的题目),其实如果不考虑时间问题,递归会很方便的完成求解,正是由于TM time问题,我们不得不另寻捷径——动态规划;而这另寻的过程是将已经列出的递归方程,仔细研究,以至于最后找出一种方法替代递归,像common subsequnse

  当用递归去做的时候是

 

              F(i-1,j-1)+1   if(x[i]==z[j])

    f(i,j)=

ax(f(i-1,j),f(i,j-1))   if(x[i]!=z[j])

上式就是递归方程,如何将其改进,这里是否看以看出,f(i,j)是取决于前三个式子的值,所以我们可以先从头开始计算,f(i,j)的值可以存在数组下,这样就不要重复计算了,直到i=x_len;j=z_len;友情提醒:递归转化成非递归是要用到循环滴!

动态规划的难点在于最初的设计,在于对问题的分析;

(补充)计数对于动态规划至关重要,其也是动态解法中的要点,分析问题时,要从如何记录数据——如何填充数组开始(往往带来惊喜),网上有个结论是:从上往下分析,从下网上计算(还不甚理解)

原文地址:https://www.cnblogs.com/orangeblog/p/2153822.html