动态规划总结
2016-05-31 22:34
232 查看
动态规划,在多阶段问题的解决中,最重要的就是注意前一种状况,对于当前状态的影响。像最长上升子序列问题等,这些比较典型的题目,应该认真学习掌握。
对于0-1背包问题,普通的0-1背包,题目比较典型。就是对于N件物品,以及容量为V的背包,放入的物品费用为c[i],价值为W[i],求解装入背包物品的价值最大。
思路很明确,N件物品,可以放也可以不放,设置一个二维数组,状态方程套模板即可,f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这里要注意的是,for循环第二次循环要由大到小。
完全背包,是在0-1背包的基础上,每件物品的数量为无限。简单优化:若两件物品i、j满足c[i]<=c[j],并且w[i]>=w[j],则将物品j去掉,不用考虑。
将费用大于V的物品去掉,转化为0-1背包:考虑到第i种物品最多选V/c[i]件,于是可以把第i种物品转化为V/c[i]件费用及价值均不变的物品,然后求解这个0-1背包问题。
模板为:for i=1..N
for v=0..V
f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0=<k<=V/c[i]}
多重背包,对每种物品的数量有一定限制。掌握了0-1背包,及完全背包,多重背包就是在两者的基础上的改变。
分组背包,有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
其状态方程为:f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]|物品i属于组k} ,f[k][v]表示前k组物品花费费用v能取得的最大权值 。
在动态规划的问题上,就问题而言,都有比较典型的模板,不过在实际解决中,还是应多练习,很多与背包问题,等看似无关的题目,其实深入分析之后,完全可以转化为背包,模板套用,代码并不困难。
对于0-1背包问题,普通的0-1背包,题目比较典型。就是对于N件物品,以及容量为V的背包,放入的物品费用为c[i],价值为W[i],求解装入背包物品的价值最大。
思路很明确,N件物品,可以放也可以不放,设置一个二维数组,状态方程套模板即可,f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这里要注意的是,for循环第二次循环要由大到小。
完全背包,是在0-1背包的基础上,每件物品的数量为无限。简单优化:若两件物品i、j满足c[i]<=c[j],并且w[i]>=w[j],则将物品j去掉,不用考虑。
将费用大于V的物品去掉,转化为0-1背包:考虑到第i种物品最多选V/c[i]件,于是可以把第i种物品转化为V/c[i]件费用及价值均不变的物品,然后求解这个0-1背包问题。
模板为:for i=1..N
for v=0..V
f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0=<k<=V/c[i]}
多重背包,对每种物品的数量有一定限制。掌握了0-1背包,及完全背包,多重背包就是在两者的基础上的改变。
分组背包,有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
其状态方程为:f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]|物品i属于组k} ,f[k][v]表示前k组物品花费费用v能取得的最大权值 。
在动态规划的问题上,就问题而言,都有比较典型的模板,不过在实际解决中,还是应多练习,很多与背包问题,等看似无关的题目,其实深入分析之后,完全可以转化为背包,模板套用,代码并不困难。
相关文章推荐
- root.sh Fails to Start HAIP as Default Gateway is Configured for Private Network VLAN (文档 ID 1366211
- iOS开发UI篇—UITableview控件简单介绍
- 广告轮播1
- Multitasking the Android Way
- PYTHON_DAY6_20160527
- Java高级之虚拟机加载机制
- Java高级之虚拟机加载机制
- 编译原理-词法分析器
- 个人工作总结08(冲刺二)
- STM32F0xx_ADC采集电压配置详细过程
- PYTHON_DAY5_20160523
- 搭建纯SSH框架(一)搭建纯SSH框架(二)
- Socket
- 初识HTML
- PYTHON DAY4_20160521
- maven安装(linux)
- 夏天中暑了要怎么办!
- 团队作业七——“猎后分红”
- android项目中values中几个文件的作用
- 动态规划总结