动态规划

首先将计算机问题分解为规模较小的子问题,然后自底向上地求解各个子问题,并将子问题的解存储在一个数据结构中。

  • 优化子结构
  • 重叠子问题

问题实例

(1)0-1背包问题

  • 一个容量为C的背包和n个物品,其中第i个物品体积为weight[i],其价值为value[i],输出一个物品装包方案使得每个物品要么放入背包要么不放入背包,背包的内物品总重量不超过C且总价值达到最大值
  • 用一个数组f[i][j]表示,在总共有i个物品,容量为j的情况下背包问题的最优解。第i个物品可以选择放进背包或者不放进背包(这也就是0和1)。
  • 如果放进背包(前提是放得下):
f[i][j]=f[i-1][j-weight[i]+value[i];
  • 如果不放进背包:
f[i][j]=f[i-1][j];
  • 状态转移方程
f[i][j]=max(f[i-1][j],f[i-1][j-weight[i]+value[i]); 

(2)完全背包问题(一)

  • 一个容量为C的背包和n个物品,第i个物品体积为weight[i],其价值为value[i],每个物品都有无限多件,现在往背包里面装东西,怎么装能使背包的内物品价值最大
  • 用一个数组f[i][j]表示,在总共有i个物品,j为背包可以容纳的重量,有i种物品时,对于第i种物品,要么取或者不取,至于取多少个我们并不关心。
  • 状态转移方程
f[i][j]=max(f[i-1][j], f[i][j-weight[i]]+value[i], i=0,...,N);

(3)完全背包问题(二)

  • 用一个数组f[i][j]表示,在总共有i个物品,j为背包可以容纳的重量,有N种物品,对于每种物品假设至少包含一个,至于到底包含多少个我们并不关心。
  • 状态转移方程
f[j]=max{f[j-weight[i]]+value[i], i=0,...,N}  

(4)最少硬币找零问题(一)

  • 给予不同面值的硬币若干种,如1 5 10 20 50 100,并且每种硬币个数无限多,如何用若干种硬币组合为某种面额的钱,使硬币的的个数最少?
  • 假设j为需要找零多少元,有i种硬币,找零时对于第i种硬币,我们只考虑取或者不取,至于取多少个我们并不关心。
  • 状态转移方程
f[i][j]=min(f[i-1][j],f[i][j-coins[i]]+1);  

(5)最少硬币找零问题(二)

  • 假设j为需要找零多少元,有N种硬币,对于每种硬币,我们可以依次假设f(i)中至少包含一个coins[j] (j=0, 1……N) ,然后得到所需的最少硬币是f(j- coin[i])+1,最后再从这N次假设中选出最小的就是f(i)。
  • 状态转移方程
f[j]= min{f[j-coins[i]]+1, i=0,...,N};

(6)Word Break问题

要求一个非空字符串s,一个非空的字符串词典,判断s能够通过空格组成一个序列是词典里的多个单词
例如:s= ” leetcode”,dict=[“leet”,”code”],因为“leetcode”可以改成“leet code”故返回1。

  • 状态转移方程
dp[i+Len]=dp[i]&&dict.find(s.substr(i,Len)); #Len:[minlen,maxlen],i:[0,s.size()]  

算法设计与分析—动态规划相关推荐

  1. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  2. 算法设计与分析——动态规划(二):钢条切割

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  3. 算法设计与分析——动态规划(五):最长公共子序列

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  4. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  5. 算法设计与分析——动态规划(一)矩阵连乘

    动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...

  6. 算法设计与分析——动态规划——数字三角形问题

    数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...

  7. 算法设计与分析—动态规划算法

    动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...

  8. 算法设计与分析——动态规划——矩阵连乘问题

    动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...

  9. 算法设计与分析——动态规划——石子合并问题

    1.石子合并问题 在一个圆形操场的四周摆放着n堆石子.现要将石子有序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.设计一个算法,计算出将n堆石子合并成 ...

  10. 算法设计与分析——动态规划——01背包问题

    #include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背 ...

最新文章

  1. DPDK — 安装部署(Ubuntu 18.04)
  2. Mastering Caching in Asp.net
  3. 我的狗丢了,所以我能加你微信吗? | 今日最佳
  4. svn外网虚拟服务器设置,svn虚拟服务器设置路由器设置
  5. [转]VC6.0编译fltk-1.1.10
  6. 转载:基于Redis实现分布式锁
  7. 21 PagerTabStrip-PagerTitleStrip-viewPager
  8. 50个最新漂亮的国外网站模板下载
  9. 服务器远程协助能够禁用吗,如何使用组策略禁用/启用远程连接管理远程协助...
  10. 洛谷 P3110 [USACO14DEC]驮运Piggy Back spfa
  11. 弹弹堂高抛50°中抛计算器C#程序
  12. Dynamics 365 IFD设置反向代理后无法跳转登录页的解决方法
  13. springboot中websocket服务怎么调用其他类的方法
  14. Matlab R2017b 自动驾驶工具箱学习笔记(2)_Tutorials_Visual Perception Using Monocular Camera
  15. 考研英语长难句(刘晓燕)笔记 第五课 接近尾声的凯旋——状语和状语从句
  16. (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  17. 物流是如何用计算机管理的,计算机信息管理在物流业的应用
  18. it是什么?(详细解释)
  19. 用js获取某一年一共多少天和剩余天数
  20. Sun Solaris指令大全

热门文章

  1. vlookup匹配值不唯一_数据对比、数据查询匹配Vlookup函数3种常见错误及解决方案...
  2. 雷石服务器不显示加密盘,磁盘加锁专家加锁后的磁盘不见了,怎么办?
  3. Hadoop源码分析笔记(十一):数据节点--数据节点整体运行
  4. 每日10行代码31:爬取人民日报一日的所有文章并存入数据库
  5. 线性代数之——马尔科夫矩阵
  6. Ubuntu16 安装向日葵远程控制软件
  7. 论文阅读:AF2S3Net:Attentive Feature Fusion with Adaptive Feature Selection for Sparse Semantic
  8. Elasticsearch数据库优化实战:让你的ES飞起来
  9. 【ASP.NET 进阶】根据IP地址进行百度地图定位
  10. 如何做一个基于微信旅游攻略小程序系统毕业设计毕设作品