class Solution {
public:
int integerBreak(int n) {
vector<int>dp(n+1,0);//dp[i]:分拆数字i,可以得到的最⼤乘积为dp[i]
dp[2] = 1;//初始化
for(int i = 3;i <= n;i++){
for(int j = 0;j < i-1;j++){
dp[i] = max(dp[i],max(j*(i-j),dp[i-j]*j));
}
}
return dp[n];
}
};
go:
func integerBreak(n int) int {
dp:=make([]int,n+1)
for i := 2; i <= n;i++{
curMax := 0
for j:=1; j < i;j++{
curMax = max(curMax,max(j*(i-j),j*dp[i-j]))
}
dp[i] = curMax
}
return dp[n]
}
func max(x,y int)int{
if x > y{
return x
}
return y
}
class Solution {
public:
int integerBreak(int n) {
if(n <= 3){
return n-1;
}
int q = n / 3;
int r = n % 3;
if(r == 0){
return (int)pow(3,q);
}else if(r == 1){
return (int)pow(3,q-1)*4;
}else{
return (int)pow(3,q)*2;
}
}
};