(力扣---动态规划)整数拆分

给定正整数n,找到使其拆分乘积最大化的方案。动态规划方法是通过dp[i]表示以i为和的最大乘积,dp方程为dp[i] = max(dp[i], max(j, dp[j]) * max(i - j, dp[i - j]))。例如,对于n=10,最佳拆分为3+3+4,最大乘积为36。" 89683615,7654196,MyEclipse 8 教程:搭建SpringMVC框架,"['SpringMVC', 'MyEclipse', 'Web开发', 'Java', '框架搭建']
摘要由CSDN通过智能技术生成

(力扣—动态规划)整数拆分

问题描述

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

示例 1:

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

示例 2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
说明: 你可以假设 n 不小于 2 且不大于 58。

思想

我知道很多人碰到这种题喜欢找规律,确实有规律,规律就是:能拆成用2组成的就都用2组成,否则就用3。
但是这种问题有规律可循,如果碰到规律不好找的咋办?
所以规律这种事情,除非明眼能看出来的,其余就玩儿玩儿就好。
那这道题怎么用dp解决呢?
这道题的难点在于 我们不知道究竟要将一个数拆成多少份相乘能最大,但是我们知道无论拆成多少份,其和一定是不变的
也就是说 化繁求简,我们将拆成n(n不确定)份转化成拆成两份,然后各自再拆成两份,直到最后n是1也就是1。
简单点说 比如一个数据n,我们将它拆成 MAX(i) * MAX(n - i),找出结果最大的那个就行了,而MAX(i)、MAX(n - i)分别对应数据以i、n - i为和时最大的结果,MAX(i) * MAX(n - i)就是 i + n - i = n时的乘积最大结果。
所以dp方程是:dp[i] = max(dp[i], max(j, dp[j]) * max(i - j, dp[i - j]))
可能有人不太理解这个dp方程,下面先贴代码,之后再解释

python code
class Solution:
    def integerBreak(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值