动态规划算法(Dynamic Programing)

  动态规划方法采用最优原则(principle of optimality)来建立用于计算最优解的递归式。

所谓最优原则即不管前面的策略如何,此后的决策必须是基于当前状态的最优决策。

 

动态规划法:

  在求解某些问题的时候,可以试着吧问题分成必要多的子问题,每个子问题又可以分成数目不确定的必要多的子子问题,这样就会产生大量的子问题。如果分得的子问题界限不清,相互交叉,则在大量的子问题中会存在一些完全相同的子问题。为了避免重复解这些相同的子问题,可以在解决一个子问题之后把它的解保留下来,若遇到求解与之相同的子问题的饿时候,就可以把它找出来直接使用。

  为求解问题而将它的子问题的解填入表中以待需要的时候查表,这样的方法就是动态规划法。

 

应用:

0/1背包问题

//递归实现
int F(int i;int y)
{
//return F(i,y);
if(i==n) 
    return (y<w[n])?0:p[n];
if(y<w[i])
    return F(i+1,y);
return max(F(i+1,y),F(i+1,y-w[i])+p[i]);
}

t(1)=a,t(n)<=2t(n-1)+b ==>  t(n)=O(2n)

例:

 

posted @ 2018-08-18 16:51  Want_to_be  阅读(211)  评论(0编辑  收藏  举报