有关动态规划类问题本书不够入门,内容较严谨,不太适合小白,在此我将写下一些动态规划的基础思想(基础不代表简单,只是需要的前备知识少)。

使用动态规划法求解整数拆分问题

下面是逻辑推理的过程(动态规划方程的理由),只是为了方便理解规划方程的原因才硬写出来的。

即使不知道原因,也能写出动态规划方程,不用理由。有基础的可以跳到下方红线处。

该题目中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)nk拆分的拆分方法数

N表示要拆分的数字,k表示最多能被拆成k个的所有情况

打表(根据算出来的解,填表)如下

因此,

可得出规律:f(n,k)=f(n-k,k)+f(n,k-1)

同样根据表中规律可得出

动态规划步骤就这么简单,算出前面几个解后,填表找规律,就能求出解,

真正的难点在于试法(这个表该怎么画,是应该一维的还是二维的,变量要怎么选,要选几个),清楚了如何去试之后,解题就没什么难点,后面重点就是优化了。

动态规划法——常见题型及算法思路相关推荐

  1. 2D游戏中常见的碰撞检测算法思路(附详细思路及部分源码)

    目录1 点与点的碰撞 点与直线 点与圆的碰撞 点与矩形的碰撞 点与多边形的碰撞 点与地图格子的碰撞 直线与直线的碰撞 直线与圆的碰撞 直线与矩形多边形的碰撞 圆与圆的碰撞 圆与矩形多边形的碰撞 圆矩形 ...

  2. 公务员面试常见题型及解题思路

    公务员常见面试题有5种:人际关系.组织策划.综合分析.应急应变和演讲题 1.人际关系题 一般内容都是被领导批评了,和同事闹矛盾了之类的怎么办. 对于这类问题,首先要正确归因.分析和同事上级相处过程中哪 ...

  3. 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题

    文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...

  4. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

  5. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  6. 力扣高频算法php_互联网公司最常见的面试算法题有哪些?

    很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...

  7. 数据结构 - 二叉树 - 面试中常见的二叉树算法题

    数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...

  8. 数据结构 - 链表 - 面试中常见的链表算法题

    数据结构 - 链表 - 面试中常见的链表算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图. ...

  9. 浅谈最小生成树的算法思路(二)Kruskal算法

    Kruskal算法是另外一种最小生成树的常见算法,理解起来,笔者觉得是比Prim算法要简单的. 算法思路 定义2个集合,集合P代表已经确定的边的集合,初始为空集.集合Q代表还未确定的边的集合,初始化为 ...

最新文章

  1. OleDbHelper类
  2. 自动化运维工具Puppet(管理资源)
  3. 前端那些事之layui篇---实现栅格功能
  4. chrome浏览器被reimage pair 劫持怎么处理
  5. 不要被约束的意思_俗话说:“娶妻不娶颧骨高,嫁汉不嫁连眉梢”,到底什么意思?...
  6. Shiro的架构介绍
  7. 基于heartbeat v1配置mysql和httpd的高可用双主模型
  8. 【转】字符串和浮点数格式化输出小结
  9. .p7b证书转成iis使用的.pfx证书
  10. 工具分享 | LiqunKit 综合漏洞利用工具(下载地址在文末)
  11. 淘宝客公众号京东淘宝拼多多三合一源码三级代理系统网站源码
  12. idea 导出项目结构树
  13. mmd动作:Bad End Night
  14. 2020PayPal提现有哪些渠道?听说注册义乌个体户也可以!
  15. 洛谷P1510 精卫填海(简单的dp)
  16. 工资,一般讲税前还是税后?
  17. 苏超 计算机系 南京大学,Ni-Ti基合金薄膜相变行为及其力学特性研究
  18. Linux 如何挂载nas盘
  19. c语言欺凌,《中国校园欺凌调查报告》发布 语言欺凌占主导
  20. JS标签选择器以及节点操作

热门文章

  1. 笔记本屏幕给另一台当扩展屏幕_chenjie的博客
  2. 小学计算机听课总评,小学听课评课评语大全
  3. [附源码]java毕业设计领导干部听课评课管理系统
  4. Linux通过系统函数设置系统时间
  5. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
  6. 三元组损失(Triplet loss)
  7. mysql 去除全角空格_去掉全角空格
  8. 图数据库ONgDB Release v-1.0.0
  9. oracle收集snop,Oracle 9i 使用Statpack snap 步骤和说明
  10. 计算机论文怎样投稿sci,计算机集成论文怎么投稿sci期刊