动态规划Part03

86 阅读2分钟

Task

●  343. 整数拆分 

●  96.不同的二叉搜索树 

 详细布置 

今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。

 343. 整数拆分 

programmercarl.com/0343.%E6%95…

视频讲解:www.bilibili.com/video/BV1Mg…

 96.不同的二叉搜索树 

programmercarl.com/0096.%E4%B8…

视屏[数学公式]讲解:www.bilibili.com/video/BV1eK…

整数拆分

5 MINS 没思路,直接看讲解。目标是尽量在30MINS搞懂一道题,手段不限 拆成m个数,这m个数要尽可能相等。才能哈使最终结果相乘最大。 怎么往动态规划那边靠呢?

tnnd 五部曲 1.dp下标含义:dp[i]表示将正整数i拆分成至少两个正整数的和之后,这些正整数的最大乘积。

2.dp状态方程推导:

力扣官方题解 链接:leetcode.cn/problems/in…

当i>2时,假设对正整数i拆分出的第一个正整数是j(1<j<i),则有以下两种方案:

  • i拆分成ii-j的和, 且i-j不再拆分成多个正整数,此时的乘积是j x (i-j)
  • i拆分成ii-j的和,且i-j继续拆分成多个正整数,此时的乘积是j x dp\[i-j] 因此,当j固定的时候,有dp[i] = max(j x(i-j), j x dp[i-j]) 由于j的取值范围是1i-1,需要遍历所有的j得到dp[i]的最大值,因此最终的状态方程如下:

dp\[i] = max⁡1≤j<i{ max(j x(i-j), j x dp[i-j])}

96.不同的二叉搜索树

二叉搜索树回顾!

二叉搜索树是一个有序树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

关键点在于n个节点布局可以根据n-1个结点布局推出来。 0个节点布局为1种 1个节点布局为1种 2个节点布局为2种 3个节点布局由前3布局推理而出 好,就这么多,以后再补,下播!!