算法设计与分析—动态规划
动态规划
首先将计算机问题分解为规模较小的子问题,然后自底向上地求解各个子问题,并将子问题的解存储在一个数据结构中。
- 优化子结构
- 重叠子问题
问题实例
(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()]
算法设计与分析—动态规划相关推荐
- 算法设计与分析-----动态规划
算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...
- 算法设计与分析——动态规划(二):钢条切割
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
- 算法设计与分析——动态规划(五):最长公共子序列
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
- 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...
动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...
- 算法设计与分析——动态规划(一)矩阵连乘
动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...
- 算法设计与分析——动态规划——数字三角形问题
数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...
- 算法设计与分析—动态规划算法
动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...
- 算法设计与分析——动态规划——矩阵连乘问题
动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...
- 算法设计与分析——动态规划——石子合并问题
1.石子合并问题 在一个圆形操场的四周摆放着n堆石子.现要将石子有序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.设计一个算法,计算出将n堆石子合并成 ...
- 算法设计与分析——动态规划——01背包问题
#include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背 ...
最新文章
- DPDK — 安装部署(Ubuntu 18.04)
- Mastering Caching in Asp.net
- 我的狗丢了,所以我能加你微信吗? | 今日最佳
- svn外网虚拟服务器设置,svn虚拟服务器设置路由器设置
- [转]VC6.0编译fltk-1.1.10
- 转载:基于Redis实现分布式锁
- 21 PagerTabStrip-PagerTitleStrip-viewPager
- 50个最新漂亮的国外网站模板下载
- 服务器远程协助能够禁用吗,如何使用组策略禁用/启用远程连接管理远程协助...
- 洛谷 P3110 [USACO14DEC]驮运Piggy Back spfa
- 弹弹堂高抛50°中抛计算器C#程序
- Dynamics 365 IFD设置反向代理后无法跳转登录页的解决方法
- springboot中websocket服务怎么调用其他类的方法
- Matlab R2017b 自动驾驶工具箱学习笔记(2)_Tutorials_Visual Perception Using Monocular Camera
- 考研英语长难句(刘晓燕)笔记 第五课 接近尾声的凯旋——状语和状语从句
- (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
- 物流是如何用计算机管理的,计算机信息管理在物流业的应用
- it是什么?(详细解释)
- 用js获取某一年一共多少天和剩余天数
- Sun Solaris指令大全
热门文章
- vlookup匹配值不唯一_数据对比、数据查询匹配Vlookup函数3种常见错误及解决方案...
- 雷石服务器不显示加密盘,磁盘加锁专家加锁后的磁盘不见了,怎么办?
- Hadoop源码分析笔记(十一):数据节点--数据节点整体运行
- 每日10行代码31:爬取人民日报一日的所有文章并存入数据库
- 线性代数之——马尔科夫矩阵
- Ubuntu16 安装向日葵远程控制软件
- 论文阅读:AF2S3Net:Attentive Feature Fusion with Adaptive Feature Selection for Sparse Semantic
- Elasticsearch数据库优化实战:让你的ES飞起来
- 【ASP.NET 进阶】根据IP地址进行百度地图定位
- 如何做一个基于微信旅游攻略小程序系统毕业设计毕设作品