这道题还是动态规划
第一版
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(1+n);//dp[i]表示给定整数i,按题目规则得到的最大乘积
dp[2]=1;
for(int i = 3;i <= n;i++){
dp[i] = 0;
for(int j = 1;j <= i;j++)
dp[i] = max(max(j*(i-j),j*dp[i-j]),dp[i]);
}
return dp[n];
}
};
第二版,j可以只遍历到i/2
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(1+n);//dp[i]表示给定整数i,按题目规则得到的最大乘积
dp[2]=1;
for(int i = 3;i <= n;i++){
dp[i] = 0;
for(int j = 1;j <= i/2;j++)
dp[i] = max(max(j*(i-j),j*dp[i-j]),dp[i]);
}
return dp[n];
}
};