动态规划法——常见题型及算法思路
有关动态规划类问题本书不够入门,内容较严谨,不太适合小白,在此我将写下一些动态规划的基础思想(基础不代表简单,只是需要的前备知识少)。
使用动态规划法求解整数拆分问题
下面是逻辑推理的过程(动态规划方程的理由),只是为了方便理解规划方程的原因才硬写出来的。
即使不知道原因,也能写出动态规划方程,不用理由。有基础的可以跳到下方红线处。
该题目中n代表数值,k代表最多能被拆成多少组
n=4,k=4:
4—1+1+1+1
2+1+1
3+1
4
-------------------------------------------------------
n=4,k=3:
4—2+1+1
3+1
4
---------------------------------------------------------
n=4,k=2:
4—3+1
4
------------------------------------
n=4,k=1:
4—4
-----------------------------------------------
n=1,k=3:(1虽然可以允许最多被分成3个,由于1只能分成1个,因此n=1时k=2时与k=1时结果没区别)
1—1
n=2,k=2:
2—1+1
2
n=2,k=3:(2虽然允许被分成3个但2最多能被分成2个数,因此n=2时k=3与k=2没区别)
2—1+1
2
n=3,k=3:
3—1 +1+1
2+1
3
n=3,k=2:
3—2+1
3
n=3,k=1:
3—3
***********************************************************************************************************
***********************************************************************************************************
该问题中要求求解整数拆分:
N表示要拆分的数字,k表示最多能被拆成k个的所有情况
根据上面题目
书中如此解释:
1.当n=1或k=1(k=1表示这个数最终只能被分成一个数字,那就是说不能拆,也就是它自己)
因此f(n==1 || k==1)=1
2.当k>n时(例如允许2 ,拆成3个数;允许3, 拆成4个数,跟允许2分成2个数,允许3分成3个数,没区别,因为大小为n的数最多被拆成n个数)
因此f(k>n)=f(k=n)
3.当k=n时
如图:
发现了吗?f(n,n)所组成的方法数比f(n,n-1)多出来1个方案(多出来的1个方案是全部都由1组成的方法)
因此可得规律:
N=k时,f(n,n)=f(n,n-1)+1
4.当k<n时。。。balabala在此不建议看书上了,我明明白白告诉你,那个理由是作者弄出答案之后硬掰出来的。为的是让自己写的书看起来逻辑完美。笔试时压根不会给你时间深究原理。)
下面是做动态规划求解此题的真正做法:
设f(n,k)为n的k拆分的拆分方法数
N表示要拆分的数字,k表示最多能被拆成k个的所有情况
打表(根据算出来的解,填表)如下
因此,
可得出规律:f(n,k)=f(n-k,k)+f(n,k-1)
同样根据表中规律可得出:
动态规划步骤就这么简单,算出前面几个解后,填表,找规律,就能求出解,
真正的难点在于试法(这个表该怎么画,是应该一维的还是二维的,变量要怎么选,要选几个),清楚了如何去试之后,解题就没什么难点,后面重点就是优化了。
动态规划法——常见题型及算法思路相关推荐
- 2D游戏中常见的碰撞检测算法思路(附详细思路及部分源码)
目录1 点与点的碰撞 点与直线 点与圆的碰撞 点与矩形的碰撞 点与多边形的碰撞 点与地图格子的碰撞 直线与直线的碰撞 直线与圆的碰撞 直线与矩形多边形的碰撞 圆与圆的碰撞 圆与矩形多边形的碰撞 圆矩形 ...
- 公务员面试常见题型及解题思路
公务员常见面试题有5种:人际关系.组织策划.综合分析.应急应变和演讲题 1.人际关系题 一般内容都是被领导批评了,和同事闹矛盾了之类的怎么办. 对于这类问题,首先要正确归因.分析和同事上级相处过程中哪 ...
- 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题
文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
- 力扣高频算法php_互联网公司最常见的面试算法题有哪些?
很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...
- 数据结构 - 二叉树 - 面试中常见的二叉树算法题
数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...
- 数据结构 - 链表 - 面试中常见的链表算法题
数据结构 - 链表 - 面试中常见的链表算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图. ...
- 浅谈最小生成树的算法思路(二)Kruskal算法
Kruskal算法是另外一种最小生成树的常见算法,理解起来,笔者觉得是比Prim算法要简单的. 算法思路 定义2个集合,集合P代表已经确定的边的集合,初始为空集.集合Q代表还未确定的边的集合,初始化为 ...
最新文章
- OleDbHelper类
- 自动化运维工具Puppet(管理资源)
- 前端那些事之layui篇---实现栅格功能
- chrome浏览器被reimage pair 劫持怎么处理
- 不要被约束的意思_俗话说:“娶妻不娶颧骨高,嫁汉不嫁连眉梢”,到底什么意思?...
- Shiro的架构介绍
- 基于heartbeat v1配置mysql和httpd的高可用双主模型
- 【转】字符串和浮点数格式化输出小结
- .p7b证书转成iis使用的.pfx证书
- 工具分享 | LiqunKit 综合漏洞利用工具(下载地址在文末)
- 淘宝客公众号京东淘宝拼多多三合一源码三级代理系统网站源码
- idea 导出项目结构树
- mmd动作:Bad End Night
- 2020PayPal提现有哪些渠道?听说注册义乌个体户也可以!
- 洛谷P1510 精卫填海(简单的dp)
- 工资,一般讲税前还是税后?
- 苏超 计算机系 南京大学,Ni-Ti基合金薄膜相变行为及其力学特性研究
- Linux 如何挂载nas盘
- c语言欺凌,《中国校园欺凌调查报告》发布 语言欺凌占主导
- JS标签选择器以及节点操作
热门文章
- 笔记本屏幕给另一台当扩展屏幕_chenjie的博客
- 小学计算机听课总评,小学听课评课评语大全
- [附源码]java毕业设计领导干部听课评课管理系统
- Linux通过系统函数设置系统时间
- 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
- 三元组损失(Triplet loss)
- mysql 去除全角空格_去掉全角空格
- 图数据库ONgDB Release v-1.0.0
- oracle收集snop,Oracle 9i 使用Statpack snap 步骤和说明
- 计算机论文怎样投稿sci,计算机集成论文怎么投稿sci期刊