专题三 总结动态规划
来源:互联网 发布:淘宝app看价格曲线 编辑:程序博客网 时间:2024/05/27 16:43
动态规划总结
一、解释:
解决多阶段策略问题的一种方法,运用最优性原理,排除重复计算,用空间换时间的算法。
二、适用的题目类型:
1.问题具有多阶段的决策
2.每个阶段对应一个状态(状态变量)
3.每个阶段有一个决策(不同的决策导致下一个阶段不同的状态)
4.每个阶段的最优解可以递归地归结为下一个阶段各个可能状态的最优解问题
三、一般的解题步骤
1.判断问题是否具最优子结构性质者
2.分阶段
3.建立状态转移方程(递归公式)
4.找出边界条件
5.将已知的边界值带入方程
6.递归求解
四、经典问题:
楼梯问题、最大M字段和问题等
五、动态规划的背包问题
(1)01背包
特点:每种物品仅有一件,可以选择放或不放,求最大价值
状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]};
伪代码:(空间优化)
for i=1..N
for v=v..0
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
(若要求恰好装满背包,初始化的时候除了将f0]=0,其余的均为负无穷;
若没有要求必须装满,初始化的时候将f[0...v]都设成0)
(2)完全背包
特点:每种物品有N件,可以用无限次,求费用总和不超过容量的最大价值
状态转移方程:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i](0<=k<=v/c[j]);
伪代码:(空间优化)
for i..N
for v=0..V
f[v]=max{f[v],f[v-cost[i]]+w[i]}
(简单优化:将费用大于容量的去掉,两个物品相比,若一个的费用高并且重量小则直接去掉)
(3)多重背包
特点: N种物品和容量为V的背包,第i种物品最多有n[i]件可用,求费用总和不超过容量的最大价值
优化:
二进制思想:多重背包中的一个物品变成0-1背包中的多个物品
(4)分组的背包
特点:N件物品容量为V,这些物品被分若干组,每组中的物品发生冲突时最多选一件。转化为每组物品有若干种策略
状态转移方程:f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i](物品i属于k组)
伪代码:
for k=1..K(所有k组)
for v=V..0
for 所有的i属于k组
f[v]=max{f[v],f[v-c[i]+w[i]]}
六、区间动态规划
区间动态一般都是将一个区间问题不断划分为更小的区间甚至一个元素组成的区间,枚举他们的组合,求合并后的最优值。
区间动态规划的模板代码:
for(int p=1;p<=n;p++){
for (inti=1;i<=n;i++){
int j=i+p-1;
for (int k=i;k<j;k++)
dp[i][j]=min{dp[i][k]+dp[k+1][j]+w[i][j]};
dp[i][j]=max{dp[i][k]+dp[k+1][j]+w[i][j];
}}
- 专题三 总结动态规划
- 动态规划专题三总结
- 专题三-动态规划算法总结
- 动态规划专题总结
- 动态规划专题总结
- 动态规划专题总结
- 动态规划专题总结
- 动态规划专题总结!
- 动态规划专题结束总结
- ACM-动态规划专题总结
- 2014专题训练之动态规划总结
- 第三专题总结(动态规划)
- ACM第三专题—动态规划总结
- HDU动态规划专题
- 动态规划专题:beginner
- 动态规划专题:BZOJ1207
- 动态规划专题
- 动态规划专题(III)
- C++作业6
- jQuery源码分析笔记一
- 实习第八天:surfaceView实现图片缩放拖动功能
- Hive2.0.0操作HBase 1.2.1报错解决
- 字符串匹配KMP算法
- 专题三 总结动态规划
- 实习第八天:在SurfaceView中照样使用Android—Tween Animation!
- [CSAPP笔记][第十一章网络编程]
- 一个好用的网络图片下载工具类ImageLoader (LruCache一级缓冲机制)
- String与StringBuffer字符串反转
- XenServer架构之高可用性概述
- 关于struts2中文件上传获取不到文件名的问题
- 求素数
- GitHub 基础学习