算法训练 | Day41动态规划

news/2024/11/17 0:38:22/

343. 整数拆分

思路:

  1. 确定dp数组(dp table)以及下标的含义:dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。

  2. 确定递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))

    可以想 dp[i]最大乘积是怎么得到的呢?

    其实可以从1遍历j,然后有两种渠道得到dp[i].

    一个是j * (i - j) 直接相乘。

    一个是j * dp[i - j],相当于是拆分(i - j)。

  3. dp数组如何初始化:dp[0] dp[1] 不应该初始化,没有意义的数值。dp[2] = 1

  4. 确定遍历顺序:dp[0] dp[1] 就不应该初始化,也就是没有意义的数值。

  5. 举例推导dp数组

举例当n为10 的时候,dp数组里的数值,如下:

343.整数拆分

class Solution:def integerBreak(self, n: int) -> int:dp = [0] *(n+1)dp[2] = 1# 假设对正整数 i 拆分出的第一个正整数是 j(1 <= j < i),则有以下两种方案:# 1) 将 i 拆分成 j 和 i−j 的和,且 i−j 不再拆分成多个正整数,此时的乘积是 j * (i-j)# 2) 将 i 拆分成 j 和 i−j 的和,且 i−j 继续拆分成多个正整数,此时的乘积是 j * dp[i-j]for i in range(3,n+1):for j in range(1,i):dp[i] = max(dp[i],j*(i-j),j*dp[i-j])return dp[n]

96.不同的二叉搜索树

96.不同的二叉搜索树

n为1的时候有一棵树,n为2有两棵树,这个是很直观的。

96.不同的二叉搜索树1

可以通过dp[1] 和 dp[2] 来推导出来dp[3]的某种方式。

dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量

元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量

元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量

元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量

有2个元素的搜索树数量就是dp[2]。

有1个元素的搜索树数量就是dp[1]。

有0个元素的搜索树数量就是dp[0]。

所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]

如图所示:96.不同的二叉搜索树2

思路 :

  1. 确定dp数组(dp table)以及下标的含义:dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。

  2. 确定递推公式:dp[i] += dp[j - 1] * dp[i - j]

    dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]

  3. dp数组如何初始化:dp[0] = 1

  4. 确定遍历顺序:遍历i里面每一个数作为头结点的状态,用j来遍历

  5. 举例推导dp数组

n为5时候的dp数组状态如图:

96.不同的二叉搜索树3

class Solution:def numTrees(self, n: int) -> int:dp = [0 for _ in range(n+1)]dp[0] = 1for i in range(1,n+1):for j in range(1,i+1):dp[i] += dp[j-1]*dp[i-j]return dp[n]

http://www.ppmy.cn/news/53218.html

相关文章

【前端笔记】前端包管理工具和构建打包工具介绍之npm、yarn、webpack、vite

一、NPM包管理工具 1.1、什么是NPM NPM&#xff08;Node Package Manager&#xff09;是node包管理器&#xff0c;是node.js默认采用的软件包管理系统&#xff0c;使用JavaScript语言编写。包管理可以理解为依赖管理&#xff0c;有一个npm包管理仓库&#xff0c;当我们执行np…

UML--类图--软件工程系统学习-- idea查看类图-类关系图

文章目录 什么是类图类图的用途类图的组成 类什么是类类符号类关系依赖&#xff08;Dependence&#xff09;idea查看依赖 关联关系&#xff08;association&#xff09;继承/泛化idea查看继承 实现&#xff08;realization&#xff09;聚合组成组合和聚合之间的差异 类图详解id…

“量子+生成式AI”!IBM联合生物制药公司Moderna进行疫苗研究

​ &#xff08;图片来源&#xff1a;网络&#xff09; 4月20日&#xff0c;以COVID-19疫苗而闻名的生物技术和制药公司Moderna Inc.表示&#xff0c;宣布正在与IBM公司合作&#xff0c;利用量子计算和生成式人AI探索推进研究mRNA技术的方法。 双方签署了一项协议&#xff0c;允…

Vue组件-非单文本组件

非单文本组件(用的少) 在vue中&#xff0c;组件是有两种编写格式的&#xff0c;第一种格式叫非单文本组件&#xff0c;第二种格式叫单文本组件 非单文本组件&#xff1a;一个文件中含有多个组件&#xff0c;也叫多文本组件&#xff0c;比如demo.html里面包含js,css… 单文本…

blast的-max_target_seqs?

Shah, N., Nute, M.G., Warnow, T., and Pop, M. (2018). Misunderstood parameter of NCBI BLAST impacts the correctness of bioinformatics workflows. Bioinformatics. 杂志Bioinformatics以letter to the editor的形式刊发了来自美国马里兰大学计算机系的Nidhi Shah等人…

Windows子系统保存位置更改释放C盘(最简单)

Windows子系统保存位置更改 目录 使用场景解决思路操作流程关闭子系统找到文件存放地址新的路径文件迁移创建链接 使用场景 使用WSL(Linux子系统)做深度学习开发&#xff0c;在微软的应用商店安装的Ubuntu22.04会将系统默认安装在C盘&#xff0c;随着使用时间测增长&#xff…

springmvc jpa 多数据源

本次使用Mysql 和 sqlServer 一 POM 版本大家自己换一下 <!-- JPA --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>1.13.13.RELEASE</version></d…

美颜SDK的性能测试和优化方案

美颜SDK作为美颜相机、短视频等应用的核心技术之一&#xff0c;对于提升用户体验和增加应用商业价值起到了至关重要的作用。然而&#xff0c;如何对美颜SDK进行性能测试和优化&#xff0c;成为了广大应用开发者们所面临的一大难题。很多开发者也曾经向小编提起过应该如何着手优…