标签:
基本思想:将问题分解成若干个子问题,与分治法相似,但是注意:动态规划分解出来的子问题有可能不是独立的,而分治法的子问题独立
动态规划中的子问题一般是重叠的,也就是一个子问题的解建立在另一个子问题的解的基础上,通过对子问题解的存储来避免重复计算
适用情形: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+1) 15 { 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