思路
- dp数组定义:i的最大化乘积为dp[i]
- 递推公式:j取1到二分之i,然后分别求dp[i] = max( dp[i], max(j*(i-j), j*dp[i-j]))
- dp数组初始化:dp[2] = 1
- 遍历顺序:顺序遍历
- 时间复杂度:
代码
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n+1);
dp[2] = 1;
for(int i = 3; i <= n; i++){
for(int j = 1; j <= i/2; j++){
dp[i] = max( dp[i], max(j*(i-j), j*dp[i-j]));
}
}
return dp[n];
}
};