码迷,mamicode.com
首页 > 编程语言 > 详细

动态规划算法

时间:2016-04-18 17:22:06      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

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

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

适用情形: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、最优矩阵的填写

2、边界条件注意

3、在矩阵中找最优解

动态规划算法

标签:

原文地址:http://www.cnblogs.com/qinfendexiaowoliu/p/5396368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!