动态规划day03

343. 整数拆分(第二次做还是没弄明白)

力扣题目链接(opens new window)

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:

  • 输入: 2
  • 输出: 1
  • 解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

  • 输入: 10
  • 输出: 36
  • 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
看到题目的第一想法

        dp ,列出最大乘积找规律,发现,按照3来拆分是能达到最大乘积的

        dp[i] 代表最大的乘积

        根据规律进行初始化,将dp[i-3] 与3 相乘

        但我的做法不太符合dp的规律

看到代码随想录之后的想法

        拆分成近似的数时,得到的乘积是最大的

        动规五部曲,很快的写出解题思路

        1确定dp数组以及对应下标的含义

        dp[i] 代表最大的乘积

        2确定递推公式

        dp[i][j] = dp[i-1][j]+dp[i][j-1]

        3dp数组初始化

        需要把第一行和第一列都初始化,都为1

        4确定遍历顺序

        从上往下,从前往后

        5手动推导dp数组

        6打印dp数组

        打印dp[m-1][n-1]

自己实现过程中遇到的困难

        注意初始化

class Solution {/*public int integerBreak(int n) {//确定dp和每个下标的含义//dp的每个下标对应每一个数的最大乘积?//确定递推公式//5开始,然后3加上对应下标的最大乘积//确定dp数组的初始条件//dp[0]=1 dp[1]=1 dp[2]=2 //确定遍历顺序//从前往后//举例推导dp数组//dp[0]=1 dp[1]=1 dp[2]=2 dp[3]=2 dp[4] =4 dp[5]=6 dp[6]=9 dp[7] = 3*dp[7-3] dp[8]=3+dp[8-3] //打印dp数组if(n==2){return 1;}if(n==3){return 2;}if(n==4){return 4;}if(n==5){return 6;}if(n==6){return 9;}int dp[] = new int[n];dp[1]=1;dp[2]=2;dp[3]=4;dp[4]=6;dp[5]=9;for(int i=6;i<n;i++){dp[i]=3*dp[i-3];}return dp[n-1];}*///卡哥做法//我的做法的问题,dp的初始值设置的过多,违背的dp的本来含义,有点类似于拆成很多个3的感觉//卡哥做法:拆分当前值,存到dp数组中,dp[i] = max(i*(i-j),i*dp[i-j],dp[i]);// j*(i-j) 就是当前数拆成两个// j*dp[i-j] 就是当前数,和之前dp得到的最大数相乘的最大值,dp[i-j]存放的是拆分i-j所得到的最大值// dp[i] 记录就是得到的值动态变化,变化中的最大值就是dp[i] public int integerBreak(int n) {//确定dp和每个下标的含义//dp的每个下标对应每一个数的最大乘积?//确定递推公式//dp[i] = max(dp[i],j*(i-j),dp[i-j]*j)//确定dp数组的初始条件//dp[0]=0 dp[1]=0 dp[2]=1 //确定遍历顺序//从前往后//举例推导dp数组//dp[0]=0 dp[1]=0 dp[2] = 1//打印dp数组if(n==0){return 0;}if(n==1){return 0;}if(n==2){return 1;}int dp[] = new int[n+1];dp[0]=0;dp[1]=0;dp[2]=1;//注意是每个下标对应目标的值for(int i=3;i<=n;i++){//因为拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。//m一定>=2所以只要拆到i/2就行了 ,再往后拆一定不是最大值 for(int j=1;j<=i/2;j++){dp[i] = Math.max(dp[i],Math.max(j*(i-j),dp[i-j]*j));}}return dp[n];}
}

96. 不同的二叉搜索树

(总结时还是不太会)

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

看到题目的第一想法

        dp ,记录种数

        但是没找到规律

看到代码随想录之后的想法

        动规五部曲,很快的写出解题思路

        1确定dp数组以及对应下标的含义

        dp[i] 代表不同的种数

        2确定递推公式

        左子树为0 右子树为n-1 dp[0]*dp[n-1]

        左子树为1 右子树为n-2  dp[1]*dp[n-2]

         左子树为2 右子树为n-3  dp[2]*dp[n-3]

         左子树为3 右子树为n-4   dp[3]*dp[n-4]

        。。。

        左子树为n-1 右子树为0 dp[n-1]*dp[0]

        第n棵树的种数就是把上述的都加起来

        dp[n]=dp[n-1]*dp[0]+dp[n-2]*dp[1]

        for循环0~i 累加起来

        
                //对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加
                //一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-j
                dp[i]+=dp[j-1]*dp[i-j];

        3dp数组初始化

        dp[0]=1

        4确定遍历顺序

        从前往后

        5手动推导dp数组

        6打印dp数组

        打印dp[m-1][n-1]

自己实现过程中遇到的困难

        注意初始化

        注意是双重for循环 外层0~n 里层0~i

        将根节点编号比较好理解  当根节点为第j个节点时,左边为j-1 右边为 i-jdp[j-1]*dp[i-j]

class Solution {//我没想到思路,卡哥给的思路是和正数拆分差不多,也是分为i j 来拆//第i棵二叉树的种数为 // 左边为i-1*右边为0 dp[i-1]*dp[0]// 左边为i-2*右边为1 dp[i-2]*dp[1]// 左边为i-3*右边为2 dp[i-3]*dp[2]// ... 把以上的相加public int numTrees(int n) {//确定dp数组以及每个下标的含义//当前二叉搜索树的种数//确定递推公式//dp[i]=dp[i-1]*dp[0]+dp[i-2]*dp[1]+dp[i-3]*dp[2]...//dp[i] = for(从j=0开始到i-1dp所记录的相乘)//dp数组的初始化//空树为0//dp[0]=1 dp[1]=1//确定遍历顺序//从前往后//举例推导dp数组//dp[0]=0 dp[1] = dp[0]*dp[0] =1 dp[2] = dp[1]*dp[0]+dp[0]*dp[1]=2int[] dp = new int[n+1];dp[0]=1;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){//如果dp[1]=dp[0]*dp[0]//这里是dp[j-1]*dp[i-j]// 举例 若i为4// 0 3 j=1// 1 2 j=2// 2 1 j=3// 3 0 j=4//对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加//一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-jdp[i]+=dp[j-1]*dp[i-j];}}return dp[n];}
}

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

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

相关文章

C语言通过ODBC函数操作Access数据库(mdb和accdb格式)(char字符数组)

编译环境&#xff1a;Windows XP Visual Studio 2010 数据库&#xff1a;Access 2010&#xff0c;accdb格式 本例程只使用char[]字符数组&#xff0c;不使用wchar_t[]字符数组&#xff0c;更适合C语言初学者。 如果读取字符串时&#xff0c;提供的字符数组空间小了&#xff0c…

【Linux】Linux 系统编程——tree 命令

文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录&#xff0c;并可选择显示…

C#,迭代深化搜索(IDS)或迭代深化深度优先搜索(IDDFS)算法的源代码

摘要&#xff1a;本文介绍适合于大数据规模情况下的&#xff0c;新型的迭代深化深度优先搜索(IDDFS)算法的原理、实例及实现的C#源代码。 引言 常用的树&#xff08;或图&#xff09;遍历算法是两种&#xff1a; 广度优先搜索算法&#xff08;BFS&#xff09; 和 深度优先搜索…

燃情瞬间,智能酒精壁炉点亮户外聚会新潮流

在户外聚会中&#xff0c;一种备受瞩目的装饰品和功能性家居设备正逐渐崭露头角&#xff0c;那就是智能酒精壁炉。这种独特的户外装置不仅为聚会场合带来独特的氛围&#xff0c;还具有许多引人注目的优势。 其明亮的火焰不仅照亮整个场所&#xff0c;还散发出温暖迷人的光芒&am…

浅谈WPF之Popup弹出层

在日常开发中&#xff0c;当点击某控件时&#xff0c;经常看到一些弹出框&#xff0c;停靠在某些页面元素的附近&#xff0c;但这些又不是真正的窗口&#xff0c;而是页面的一部分&#xff0c;那这种功能是如何实现的呢&#xff1f;今天就以一个简单的小例子&#xff0c;简述如…

Python Matplotlib 库使用基本指南

简介 Matplotlib 是一个广泛使用的 Python 数据可视化库&#xff0c;它可以创建各种类型的图表、图形和可视化效果。无论是简单的折线图还是复杂的热力图&#xff0c;Matplotlib 提供了丰富的功能来满足我们的数据可视化需求。本指南将详细介绍如何安装、基本绘图函数以及常见…

【Redis】Redis面试热点

Redis 集群有哪些方案&#xff1f; 主从复制&#xff1a;解决了高并发问题 哨兵模式&#xff1a;解决了高并发&#xff0c;高可用问题 分片集群&#xff1a;解决了海量数据存储&#xff0c;高并发写的问题 主从复制 图示&#xff1a; 主从复制&#xff1a;单节点 Redis 并发…

NPN PNP SS8050 SS8550 S8050

SS8050的使用及引脚判断方法 今天讲的是NPN型三极管SS8050&#xff0c;主要分为以下几个方面&#xff1a; 一、前言 二、SS8050简介 三、NPN三极管与PNP三极管 四、三极管管脚识别方法 五、不拆卸三极管判断其好坏 六、S8050和SS8050的区别 七、三极管与MOS管的区别 八…

nginx基础面试题以及配置文件解析和命令控制

目录 1、nginx是什么 2、nginx的特点 3、为什么中国大陆有&#xff1a;百度、京东、新浪、网易、腾讯、淘宝等这么多用户使用nginx 4、nginx 的内部技术架构 上一期我们配置安装了nginx接着讲一下nginx配置文件的解析和nginx 命令控制 感谢观看&#xff01;希望能够帮助到…

mapper向mapper.xml传参中文时的乱码问题

1.起因&#xff1a; 在idea中进行模糊查询传参时&#xff0c;发现在idea中查中文查不出记录&#xff0c;在navicate中可以查出来。 2.猜测&#xff1a; 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…

Python 基础【八】--数据类型-字典【2024.1.11】

1.定义 字典的内容在花括号 {} 内&#xff0c;键-值&#xff08;key-value&#xff09;之间用冒号 : 分隔&#xff0c;键值对之间用逗号 , 分隔&#xff0c;比如创建字典 &#xff0c;如下所示&#xff1a; d{name:小明,age:18}# 使用 dict 函数&#xff1a;强转 # 方式一&am…

【一文详解】知识分享:(ASP.Net Core基础学习及快速入门)

背景知识 相关术语 .Net .NET是微软的一个开发平台&#xff0c;这个平台的一大特点就是跨语言性&#xff0c;不管是什么语言&#xff0c;c、c、c#、F#、J#、vb等语言都可以用这个平台合作开发&#xff1b; .NET&#xff0c;它是微软创建的一个用于构建多种不同类型的应用程…

书生·浦语大模型实战营-学习笔记2

目录 轻松玩转书生浦语大模型趣味Demo1. 大模型及 InternLM 模型介绍2. InternLM-Chat-7B 智能対话 Demo3. Lagent 智能体工具调用 Demo4. 浦语•灵笔图文创作理解 Demo5. 通用环境配置实验记录6. 课后作业 视频地址&#xff1a; (2)轻松玩转书生浦语大模型趣味Demo 文档教程&a…

C#用string.Replace方法批量替换某一类字符串

目录 一、关于字符串及其操作常识 二、String.Replace 方法 1.重载 2.Replace(Char, Char) 3.Replace(String, String) &#xff08;1&#xff09;实例&#xff1a; &#xff08;2&#xff09;生成结果&#xff1a; 4.Replace(String, String, StringComparison) 5.…

2023年低代码无代码产业大会:核心内容与学习收获(附大会核心PPT下载)

2023年低代码无代码产业大会聚焦了行业最前沿的趋势与技术&#xff0c;为企业数字化转型提供新的思路和方法。在这次大会上&#xff0c;我们可以深入了解到低代码/无代码技术的最新发展&#xff0c;以及如何利用这些技术来提高业务效率和创新能力。 一、大会的核心内容 1、低代…

net8 golang python性能比较

net8正式版出来两个月&#xff0c;现在性能到底如何呢&#xff0c;做个简单的例子和其他语言比较一下&#xff0c;测试内容是查找1000000以内的质数&#xff0c;代码不多&#xff0c;但包含了循环计算和Math库函数调用&#xff0c;直观的看一下语言之间差距是多少&#xff0c;心…

【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…

JWT---JSON Web Token

JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 JSON Web Token的结构是什么样的 JSON…

【每日一题】构造有效字符串的最少插入数

文章目录 Tag题目来源解题思路方法一&#xff1a;考虑 abc 的个数 写在最后 Tag 【字符串】【2024-01-11】 题目来源 2645. 构造有效字符串的最少插入数 解题思路 方法一&#xff1a;考虑 abc 的个数 思路 如果答案由 t 个 “abc” 组成&#xff0c;那么需要插入字符个数为…

概率论与数理统计-第7章 假设检验

假设检验的基本概念 二、假设检验的基本思想 假设检验的基本思想实质上是带有某种概率性质的反证法&#xff0c;为了检验一个假设H0,是否正确&#xff0c;首先假定该假设H0正确&#xff0c;然后根据抽取到的样本对假设H0作出接受或拒绝的决策&#xff0c;如果样本观察值导致了…