动态规划算法(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)

例:

 

转载于:https://www.cnblogs.com/yesy/p/9497757.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值