leetcode----343.整数拆分
题目:将n拆分为2个或2个以上的数,使乘积最大
思路:n可以拆成2个,3个,4个,等等,此时就可以考虑使用动态规划
-
dp[i] 表示i拆分为多个数可得的最大乘积
-
拆成2个: dp[i] = j*(i-j)
拆成3个: dp[i] = j*dp[i-j] 注意dp[i]的定义:此时的dp[i-j]可以表示为2个数的乘积
拆成4个: dp[i] = j*dp[i-j] 此时dp[i-j]表示3个数的乘积
....
拆成若干个 dp[i] = j*dp[i-j]
dp[i] = Math.max(j*(i-j), j*dp[i-j])
-
初始化: dp[2] = 1
-
遍历顺序 左-->右
int i = 3; i <= n; i++ {
int j = 1; j <= i-j; j++ { //此处j<=i-j j从1到i-j
dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j]));
}
}