文章目录
-
-
- 题目描述
- [法一 动态规划](#法一 动态规划)
- [法二 动态规划优化](#法二 动态规划优化)
- [法三 数学](#法三 数学)
题目描述
法一 动态规划
cpp
复制代码
int integerBreak(int n) {
vector<int> dp(n+1);
for(int i=2;i<=n;i++){
int curMax = 0;
for(int j=1;j<i;j++){
curMax = max(curMax, max(j*(i-j), j*dp[i-j]));
}
dp[i] = curMax;
}
return dp[n];
}
法二 动态规划优化
cpp
复制代码
int integerBreak(int n){
if(n<=3){
return n-1;
}
vector<int> dp(n+1);
dp[2]=1;
for(int i=3;i<=n;i++){
dp[i] = max(max(2*(i-2), 2*dp[i-2]), max(3*(i-3), 3*dp[i-3]));
}
return dp[n];
}
法三 数学
cpp
复制代码
int integerBreak(int n){
if(n<=3){
return n-1;
}
int chu = n/3, mod = n%3;
if(mod==0){
return (int)pow(3, chu);
} else if(mod==1){
return (int)pow(3, chu-1)*4;
} else {
return (int)pow(3, chu)*2;
}
}