算法训练 Day41 | 动态规划

news2024/10/6 1:39:35

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] = 1
        for 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.coloradmin.cn/o/457818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python装饰器:看懂这10个例子你就掌握了!】

基本说明 Python 装饰器是一种函数&#xff0c;它可以用来修改其他函数的功能。它是 Python 中的一项高级编程技术&#xff0c;也是 Python 中比较重要的语法之一。 简单来说&#xff0c;装饰器就是一个函数&#xff0c;它可以接受一个函数作为参数&#xff0c;并返回一个函数…

Obsidian+坚果云+FolderSync解决电脑端和安卓端同步方案

目录1.Obsidian电脑端准备 2.Obsidian安卓端准备 3.坚果云电脑端准备 4.坚果云手机端准备 5.FolderSync手机端准备 6.百度云冗余备份 1.Obsidian电脑端准备 这里以windows版本为例&#xff0c;下载后安装 1.Obsidian官网&#xff1a;https://obsidian.md/ 官网下载有时候…

电力电网行业IT运维方案

智能电网背景下&#xff0c;电力、电网企业信息化逐渐渗透到其业务链的各个环节&#xff0c;云计算、物联网、移动互联网等新技术的应用&#xff0c;更驱动信息化与业务创新深度融合。电力、电网企业集团信息系统群逐渐朝着一体化方向发展&#xff0c;信息链越来越长&#xff0…

银行数字化转型导师坚鹏:宏观经济趋势与资本行业机遇和挑战

2023年宏观经济趋势与资本行业机遇和挑战 课程背景&#xff1a; 很多学员存在以下问题&#xff1a; 不知道我国目前的宏观经济形势&#xff1f; 不清楚宏观环境对我国经济的影响&#xff1f; 不知道资本行业未来主要发展趋势&#xff1f; 课程特色&#xff1a; 精彩解…

基于php的校园校园兼职网站的设计与实现

摘要 近年来&#xff0c;信息技术在大学校园中得到了广泛的应用&#xff0c;主要体现在两个方面&#xff1a;一是学校管理系统&#xff0c;包括教务管理、行政管理和分校管理&#xff0c;是我国大学管理和信息传递的主要渠道。二是学生生活服务平台。而随着大学生毕业人数的年…

leetcode重点题目分类别记录(四)图论深入

文章目录 入度出度最大网络秩可以到达所有点的最少点数目 并查集省份数量等式方程的可满足性按字典序排列最小的等效字符串以图判树 二分图判断二分图 深度优先搜索封闭岛屿数量太平洋大西洋水流问题 广度优先搜索树上逃逸最短路径多源最短路径 拓扑排序DFS解决拓扑排序BFS解决…

MIPS指令集-mars-cpu

MIPS通用寄存器 MIPS有32个通用寄存器&#xff08;$0-$31&#xff09;&#xff0c;各寄存器的功能及汇编程序中使用约定如下&#xff1a; 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved f…

K近邻算法(手写代码+图像识别实践)

k近邻算法作为一个分类算法&#xff0c;他通过计算不同特征值之间的距离来进行分类&#xff0c;它的工作原理是存在一个样本集合作为训练样本集&#xff0c;且每个样本都存在一个标签&#xff0c;此时&#xff0c;输入一个新的样本不存在标签&#xff0c;我们通过计算这个新样本…

【Android车载系列】第10章 系统服务-SystemServer源码分析(API28)

1 SystemServer启动 &emps;&emps;SystemServer进程启动&#xff0c;首先从SystemServer.java文件的main()方法开始。 290 /** 291 * The main entry point from zygote. 292 */ 293 public static void main(String[] args) { 294 new SystemSe…

S32K3系列单片机开发笔记(SIUL是什么/配置引脚复用的功能·)

前言 今天花时间看了一下&#xff0c;SIUL2模块的相关内容&#xff0c;并参照文档&#xff0c;以及例程作了一些小记录&#xff0c;知道该如何使用这个外设&#xff0c;包括引脚的配置&#xff0c;中断配置&#xff0c;以及常用函数的使用等&#xff0c;但对其中的一些细节还需…

如何利用代码快速生成mapper.xml的<resultMap>

一&#xff0c;问题引入 当我们开发 mapper.xml ---->dao接层 ---->service接口---->serviceImp ---->controller层&#xff0c; 其中在mapper.xml编写查询语句的sql时会遇到sql查询到的结果 涉及到多张表的字段&#xff0c;或者单张表的字段过多时&#xff0c; 这…

Python文件处理

文章目录 1️⃣基本语法2️⃣读取文件⚜️读取整个文件read()⚜️with 关键词⚜️逐行读取 3️⃣写入文件⚜️写入文件write()⚜️写入数字⚜️追加内容到文件 4️⃣读取和写入二进制文件 简介 读完本篇你将学会文件的创建、读取、写入等。 1️⃣基本语法 在Python中使用文件的…

ThreadLocal机制解读和源码分析

目录 线程数据共享和安全 -ThreadLocal 什么是 ThreadLocal 代码演示 创建Dog.java 创建Pig.java T2DAO.java T2DAO T1解读set T1Service 解读 get ThreadLocalTest这个是换一种法 ThreadLocal 原理分析图 1. ThreadLocal 原理分析图(重点 set 和 get) 线程数据共…

Go Fuzzing:发现你未曾发现的漏洞

文章目录 Fuzzing(模糊测试)要求示例模拟crash 总结参考资料 Fuzzing(模糊测试) go fuzz文档 对于软件开发者而言&#xff0c;一项重要的任务就是确保程序的安全性。而其中一种风险就是软件中可能存在的漏洞。传统的测试方法往往需要耗费大量的时间和人力&#xff0c;而使用F…

【C++: 模块二 ---运算符、流程控制语句】

C&#xff1a; 模块二 ---运算符、流程控制语句 一、运算符&#xff1a;1.1算数运算符&#xff1a;1.2赋值运算符&#xff1a;1.3比较运算符&#xff1a;1.4逻辑运算符&#xff1a;1.5三目运算符&#xff1a; 二、程序流程结构2.1顺序结构&#xff1a;2.2选择结构&#xff1a;&…

ChatGPT免费第一版本

最近利用空余时间做了一个供大家免费体验的chatgpt国内可直接访问的版本 输入12345gpt.com可直接访问 贴上GPT给我回复的内容&#xff0c;&#x1f600; 当今社会&#xff0c;交流已经成为人们日常不可或缺的一部分。然而&#xff0c;随着技术的发展&#xff0c;人们对于交流工…

【Linux 裸机篇(七)】I.MX6U 中断系统

目录 一、中断向量表1. 中断向量偏移 二、中断系统简介1. 创建中断向量表 三、GIC 控制器简介1. 中断 ID 四、GIC 逻辑分块1. Distributor(分发器端)2. CPU Interface(CPU 接口端) 五、CP15 协处理器六、中断使能1. IRQ 和 FIQ 总中断使能2. ID0~ID1019 中断使能和禁止 七、中断…

【PXE高效的批量网络装机】

目录 一、PXE的概述1.1、PXE批量部署的优点1.2、搭建PXE满足的以下的前提条件1.3、搭建PXE远程安装 二、搭建PXE远程安装服务器1、安装并启动 TFTP 服务2、安装并启用 DHCP 服务3、准备 Linux 内核、初始化镜像文件4、准备PXE 引导程序5、安装FTP服务&#xff0c;准备CentOS 7 …

SpringMVC使用域对象共享数据

1、SpringMVC中的域对象 此处只有request、session、servletContext被使用&#xff0c;而page是jsp页面的域&#xff0c;不使用jsp。 request&#xff1a;一次请求的范围内session&#xff1a;一次会话的范围内servletContext&#xff1a;整个web的应用范围内 2、向request域…

MySQL高级第十七篇:数据库主从复制原理及保证数据一致性

MySQL高级第十七篇&#xff1a;数据库主从复制原理及保证数据一致性 一、概述1. 提升数据库的并发能力2. 主从复制的作用&#xff1f; 二、主从复制原理三、搭建一主一从环境四、如何解决数据一致性问题&#xff1f;1. 方案一、异步复制2. 方案二、半同步复制3. 方案三、组复制…