题目:
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。
算法:
方法一:动态规划
n 可以拆分为x,n-x, n-x可以继续拆分,也可以不拆分。
dp[i]为n = i时的,拆分成k个数能得到的的最大乘积
dp[i] = max(i * n - i, i * dp[n - i]), i取值[1,n]
func integerBreak(n int) int {
dp := make([]int, n+1)
dp[2] = 1
dp[1] = 1
for i := 2; i <= n; i++ {
for j := 1; j < i; j++ {
dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j]))
}
}
return dp[n]
}
func max(a, b int) int {
if a > b {
return a
}
return b
}