思路:
dp[i]:数字 i 拆分产生的最大乘积
转移方程 :dp[i]=max(dp[i],max(j*(i-j),dp[i-j]*j));
j*(i-j),即把该数分为两个数的乘积,dp[i-j]*j,把数字 i 分成 j 和其他多个数的乘积,
dp[i]就是每次选出最大值而已
class Solution {
public:
int integerBreak(int n) {
int dp[2000];//dp[i],数字i的最大乘积
dp[0]=0;
dp[1]=1;
dp[2]=1;
for(int i=3;i<=n;i++){
for(int j=1;j<=i-1;j++){
dp[i]=max(dp[i],max(j*(i-j),dp[i-j]*j));
}
}
return dp[n];
}
};