动态规划算法

基本思想:将问题分解成若干个子问题,与分治法相似,但是注意:动态规划分解出来的子问题有可能不是独立的,而分治法的子问题独立

     动态规划中的子问题一般是重叠的,也就是一个子问题的解建立在另一个子问题的解的基础上,通过对子问题解的存储来避免重复计算

适用情形:1、求最优解

     2、当前状态与以后无关

     3、有重叠子问题(动态规划的优势体现)

关键:确定三要素:1、问题的阶段,2、每个阶段的状态,3、从前阶段到后阶段的递推关系

六、动态规划算法基本框架
复制代码
代码
 1 for(j=1; j<=m; j=j+1) // 第一个阶段
 2    xn[j] = 初始值;
 3 
 4  for(i=n-1; i>=1; i=i-1)// 其他n-1个阶段
 5    for(j=1; j>=f(i); j=j+1)//f(i)与i有关的表达式
 6      xi[j]=j=max(或min){g(xi-1[j1:j2]), ......, g(xi-1[jk:jk+1])};
 8 
 9 t = g(x1[j1:j2]); // 由子问题的最优解求解整个问题的最优解的方案
10 
11 print(x1[j1]);
12 
13 for(i=2; i<=n-1; i=i+115 {  
17      t = t-xi-1[ji];
18 
19      for(j=1; j>=f(i); j=j+1)
21         if(t=xi[ji])
23              break;
}

 背包问题解决

1、最优矩阵的填写

根据f[i][v]=max(f[i-1][v],f[i-1][v-weight[i]]+values[i])的状态装换方程来填

2、边界条件注意

v为0,或物体为0时,最优值为0

3、在矩阵中找最优解

从v为最大,物品为n回溯

转载于:https://www.cnblogs.com/qinfendexiaowoliu/p/5396368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值