leetocde动态规划(七)-整数拆分

embedded/2024/10/19 13:05:58/

题目

343.整数拆分

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

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

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58

思路

1.确定dp数组(dp table)以及下标的含义

dp[i]表示拆分数字i能够得到的最大的乘积

2.确定递推公式

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

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

一个是j * dp[i - j],相当于是拆分(i - j),对这个拆分不理解的话,可以回想dp数组的定义。

j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));

也可以这么理解,j * (i - j) 是单纯的把整数拆分为两个数相乘,而j * dp[i - j]是拆分成两个以及两个以上的个数相乘。

如果定义dp[i - j] * dp[j] 也是默认将一个数强制拆成4份以及4份以上了。

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

3.dp数组如何初始化

dp[0]和dp[1]中0和1也无法拆解了,就初始化为0即可,dp[2]中的2可以拆解为1*1=1,即dp[2]=1

4.确定遍历顺序

dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j))由递推公式可知需从前往后遍历

5.举例推导dp数组

代码

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


http://www.ppmy.cn/embedded/128745.html

相关文章

AI图像处理工具:开发者高阶用法与最佳实践

引言 随着人工智能技术的迅猛发展&#xff0c;AI图像处理工具正日益成为开发者工作流程中不可或缺的一部分。这些工具不仅能有效处理图像&#xff0c;还能通过深度学习模型实现复杂的图像理解和生成任务。本文将深入探讨开发者在使用AI图像处理工具时的高阶用法&#xff0c;提…

1971. 寻找图中是否存在路径

有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接&#x…

分布式环境下验证码登录的技术实现

分布式环境下验证码登录的技术实现 在分布式系统中&#xff0c;实现验证码登录是一个复杂但至关重要的任务。它不仅能防止暴力破解和自动化攻击&#xff0c;还能提高系统的安全性和用户体验。本文将详细介绍在分布式环境下如何实现验证码登录&#xff0c;涵盖验证码的生成、存…

Django JWT配置使用

settings.py中配置 ####################################JWT KEY##################################JWT_KEY %*5xpP%2xL ####################################################################utils.py中引用 import jwt from django.conf import settingsdef encode_jw…

jetson nano ubuntu20.04安装ros-Noetic

jetson nano ubuntu20.04 安装ros-Noetic 一. 初始准备nano连接wifinano网络配置二. 查看系统版本三. 开始安装1. 移除不需要的 amd64 架构2. 配置软件源3.安装 ROS Melodic`4. 解决 rosdep update报错`一. 初始准备 nano连接wifi nano网络配置 二. 查看系统版本 lsb_relea…

Spring Cloud Alibaba 体系-组件-Sentinel

Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制组件&#xff0c;主要用于处理微服务中的限流、熔断和降级&#xff0c;帮助提高系统的稳定性和可靠性。它在微服务架构中&#xff0c;尤其是与 Spring Cloud、Dubbo 等框架结合时&#xff0c;起到了至关重要的保护作…

Java老鸟前端小白uniapp+uview开发小程序第2天

声明一下&#xff1a;该系列文章不定时更新&#xff0c;更新也没有预定顺序&#xff0c;纯粹是自己开发笔记。 今天的内容有&#xff1a; uniapp的页面路由、跳转、参数、Vuex等 1、uniapp页面 在pages文件夹下新建vue或nvue文件在pages.json配置页面属性"pages":…

开源限流组件分析(一):juju/ratelimit

文章目录 前言数据结构对外提供接口初始化令牌桶获取令牌 核心方法adjustavailableTokenscurrentTicktakeTakeAvailableWait系列 前言 这篇文章分析下go开源限流组件juju-ratelimit的使用方式和源码实现细节 源码地址&#xff1a;https://github.com/juju/ratelimit 版本&…