文章目录
- 题目描述
- 法一 动态规划
- 法二 动态规划优化
- 法三 数学
题目描述
法一 动态规划
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];}
法二 动态规划优化
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];}
法三 数学
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;}}