题目描述
给一个n(n>=2),求相加等于n且乘积最大的一组整数的积。
题解
这其实就是一道高中数学题,但是leetcode上的数据比较水,导致完全不用数学推导的O(n2)的dp也可以过。
解法一(纯dp):
令dp[n]为n对应的最大积。
那么递推方程就是:dp[n]=max(i*dp[n-i],i*(n-i))(其中i从1到n-1)。
边界:dp[2]=1;
时间复杂度:O(n2)
java
class Solution {
public int integerBreak(int n) {
int [] dp = new int[n];
dp[1] = 1;
for(int i = 2;i<=n;i++)
{
for(int j = 1;j<=i-1;j++)
{
dp[i]= Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));
}
}
return dp[n];
}
}