Day41|动态规划3

整数拆分

思路分析:

1.dp[i]的含义是分拆数字i之后,得到的最大乘积为dp[i].

2.确定递推公式

拆分出的数可能为2个,或两个以上。

拆分结果必定是小于这个数本身,最小为1。

j从1开始遍历,拆分出的数字逐渐变大,但要找出所有拆分结果乘积中的最大的那个,一边比较,一边继续遍历和拆分,直到找到所有拆分结果中乘积最大的那个为止,返回最大乘积。

递推公式:dp[i] = max{dp[i], (i-j)*j,dp[i - j] * j};

3.初始化,dp[1]和dp[0]初始化没有意义,初始化dp[2]=1;

4.确定遍历顺序

由于dp[i]依赖于dp[i - j]的状态,所以遍历i是从前往后的,也就是说,先有了dp[i - j]才有了dp[i].

拆分0无意义,应该从1开始。

拆分一个数n使之乘积最大,那么一定是拆成m个近似相同的子数相乘才是最大的,m的大小一定是大于等于2的。(可求证)

由上面可以知道,j遍历到n/2即可,超过n/2就找不到近似相等的子数,一定不是最大值。

class Solution{
public:int interBreak(int n){vector<int>dp(n+1);dp[2]=1;for(int i = 3; i <= n; i++){for(int j = 1;j <= n/2 ;j++){dp[i] = max(dp[i],max((i - j)*j,dp[i - j]*j));}}return dp[n];}
};

不同的二叉搜索树

思路分析:

找出递推关系:

子树上有2个元素就有2种排序的方式,只是比如1,2.可能是1放在2的左子树,也可能是

2放在1的右子树。

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]

1.dp[i]的含义是从1到i为节点组成的二叉搜索树的个数为dp[i].

2.递推公式:dp[i]=dp[以j为头节点的左子树节点数量]*dp[以j为头节点的右子树节点数量]

即:dp[i]=dp[j-1]*dp[i - j];

j - 1,i - j表示上述递归过程中左子树的节点数量不断减少,右子树数量不断增加,直到左子树数量变为0,右子树数量达到总结点数 - 1

初始化:dp[0] = 1 空树状态,满足上面递推公式

4.遍历顺序:以i作为头节点,j用来遍历当i为头节点时的状态。

class Solution{
public:int numTree(int n){vector<int>dp(n+1);dp[0] = 1;for(int i = 1; i <= n; i++){//以i为头节点for(int j =1; j <= i; j++){dp[i] += dp[j - 1]*dp[i - j];//左子树节点数为j-1时,右子树节点数为i - j,左右子树可能的情况数目之积即为所有可能的二叉树分布}}return dp[n];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703458.shtml

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

相关文章

Android java中内部类的使用

一.成员内部类 实验1&#xff1a;成员内部类 class Outer {private int a 10;class Inner {public void printInfo(){System.out.println("a "a);}}}public class InnerDemo {public static void main(String args[]) {Outer o new Outer();Outer.Inner i o.new…

K8S节点GPU虚拟化(vGPU)

vGPU实现方案 4paradigm提供了k8s-device-plugin,该插件基于NVIDIA官方插件(NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理GPU进行切分,并对显存和计算单元进行限制,从而模拟出多张小的vGPU卡。在k8s集群中,基于这些切分后的vGPU进行调度,使不同的容器…

数据结构--双向链表专题

目录 1. 双向链表的结构2. 实现双向链表预先的准备初始化尾插、头插尾删、头删查找在pos位置之后插⼊数据删除pos位置的数据 3. 顺序表和双向链表的分析 1. 双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头结点”是两个概念&#xff0c;为了更好的理解直接称…

期权Delta动态对冲成本计算—基于效用的Whalley-Wilmott 方法

Whally 和 Wilmott方法 交易员通常采用 Whally 和 Wilmott 的渐近解&#xff0c;这种方法计算起来比较简单&#xff0c;在实际操作中有非常广泛的应用。 Whally 和 Wilmott&#xff08;1997&#xff09;假设交易成本很小&#xff0c;那么就可以得到 HN 方法的渐进解法&#xf…

Spring Security源码学习

Spring Security本质是一个过滤器链 过滤器链本质是责任链设计模型 1. HttpSecurity 【第五篇】深入理解HttpSecurity的设计-腾讯云开发者社区-腾讯云 在以前spring security也是采用xml配置的方式&#xff0c;在<http>标签中配置http请求相关的配置&#xff0c;如用户…

OLED创新产品:49寸OLED透明屏展示柜

49寸透明屏展示柜是一种采用OLED透明屏技术的展示设备&#xff0c;具有透明特性和高清显示效果。它通常用于商店、展厅、博物馆等场所&#xff0c;用于展示商品、艺术品、文物等物品。 这种展示柜的特点是可以将展品放置在透明的OLED屏幕上&#xff0c;使得展品仿佛悬浮在空中&…

【Java笔记】01 概述

【Java笔记】01 概述 一、java特性 1.面向对象的&#xff08;oop) 2.健壮的&#xff0c;由强制类型机制、异常处理、垃圾的自动收集等保证 3.跨平台性的&#xff0c;一个编译好的class文件可在多个操作系统下运行 4.解释性的 解释性&#xff1a;编译后的代码&#xff0c;不能直…

C++基础知识(四:类的学习)

类 类指的就是对同一类对象&#xff0c;把所有的属性都封装起来&#xff0c;你也可以把类看成一个高级版的结构体。 【1】定义 class 类名 { 访问权限:成员属性; 访问权限:成员方法; }访问权限&#xff1a; public:共有的&#xff0c;类内、类外和子类中都可以访问 private:私有…

【AIGC大模型】跑通wonder3D (windows)

论文链接&#xff1a;https://arxiv.org/pdf/2310.15008.pdf windows10系统 显卡&#xff1a;NVIDIA rtx 2060 一、安装anaconda 二、安装CUDA 11.7 (CUDA Toolkit 11.7 Downloads | NVIDIA Developer) 和 cudnn 8.9.7(cuDNN Archive | NVIDIA Developer)库 CUDA选择自定…

Mysql数据库学习之范式

范式 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则称为范式。可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的级别&#xff0c;要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式都包含哪些 6种范式…

matlab|计及源荷不确定性的综合能源生产单元运行调度与容量配置随机优化模型

目录 1 主要内容 1.1 风光场景聚类 1.2 主模型程序结果 1.3 随机模型和确定性模型对比 1.4 有无储气对比 1.5 煤价灵敏性分析 1.6 甲烷价格灵敏性分析 2 部分程序 3 下载链接 1 主要内容 本程序复现《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机…

300分钟吃透分布式缓存-14讲:大数据时代,MC如何应对新的常见问题?

大数据时代 Memcached 经典问题 随着互联网的快速发展和普及&#xff0c;人类进入了大数据时代。在大数据时代&#xff0c;移动设备全面融入了人们的工作和生活&#xff0c;各种数据以前所未有的 速度被生产、挖掘和消费。移动互联网系统也不断演进和发展&#xff0c;存储、计…

信息安全管理与评估赛题解析-内存取证(含环境)

内存取证解析 文章目录 内存取证解析题目&答案:解题过程:1. 搜集内存信息。2. 检查此文件是否可用,如下图所示就是可以正常使用的情况。也可以不检查直接往下操作。3. 查看用户名及其哈希值4. 爆破系统密码5. 想要获取IP地址需要查看网络连接情况6. 想要获取主机名需要找…

【前沿热点视觉算法】-钢缺陷图像显著目标检测的跨尺度边缘净化网络

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 钢缺陷图像显著目标检测的跨尺度边缘净化网络 2 论文摘要 显著目标检测在自然场景图像中取得了很大的成功&#xff0c;但在钢缺陷图像&#xff08;SDIs&#xff09;中仍有很大…

【C语言】linux内核ipoib模块 - ipoib_tx_poll

一、中文注释 这段代码是 Linux 内核网络栈中与 InfiniBand 协议相关的一个部分&#xff0c;特别是与 IP over InfiniBand (IPoIB)相关。该函数负责去处理IPoIB的发送完成队列&#xff08;发送CQ&#xff09;上的工作请求&#xff08;work completions&#xff09;。以下是对这…

802.11局域网的 MAC 层协议、CSMA/CA

目录 802.11 局域网的 MAC 层协议 1 CSMA/CA 协议 无线局域网不能使用 CSMA/CD 无线局域网可以使用 CSMA 协议 802.11 的 MAC 层 分布协调功能 DCF 点协调功能 PCF CSMA/CA 协议的要点 2 时间间隔 DIFS 的重要性 SIFS DIFS 3 争用信道的过程 时隙长度的确定 退避…

【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现

什么是移位寄存器 移位寄存器&#xff1a;是指多个寄存器并排相连&#xff0c;前一个寄存器的输出作为下一个寄存器的输入&#xff0c;寄存器中存放的数据在每个时钟周期向左或向右移动一位。 下面的右移移位寄存器因为左侧没有有效输入&#xff0c;所以在第4个时钟周期&…

【JavaEE】_HttpServlet类

目录 1. init方法 2. destory方法 3. service方法 4. servlet生命周期 前文已经提及到&#xff1a;servlet是tomcat提供的&#xff0c;用于操作HTTP协议的一组API&#xff0c;可以将这组API理解为HTTP服务器的框架&#xff1b; 编写一个servlet程序&#xff0c;往往都要继…

element table数据量太大,造成浏览器崩溃。解决方案

这是渲染出来的数据 其实解决思路大致就是&#xff1a;把后台返回的上万条数据&#xff0c;进行分割&#xff08;前端分页&#xff09;&#xff0c;这样先加载几十条&#xff0c;然后再用懒加载的方式去concat&#xff0c;完美解决 上代码 <template><div class&quo…

c语言经典测试题6

1.题1 void print(char* s) {if (*s){print(s);printf("%c", *s);} } #include<stdio.h> int main() {char str[] "Geneius";print(str);return 0; } 上述代码是一个递归&#xff0c;那么它运行的结果是什么呢&#xff1f; 我们来分析一下&#x…