一、题目
二、代码
class Solution
{
public int integerBreak(int n)
{
int i,j;
int[]dp = new int[n+1];
dp[2] = 1;
for(i=3;i<=n;i++)
{
for(j=0;j<=i/2;j++)
{
//自身保留 两种拆法
dp[i] = Math.max(dp[i],Math.max(dp[i-j]*j,(i-j)*j));
}
}
return dp[n];
}
}
三、运行结果
四 、附录
二刷
class Solution
{
public int integerBreak(int n)
{
int i,j;
int[] res = new int[n+1];
for(i=1;i<=n;i++)
{
for(j=1;j<=i/2;j++)
{
int temp1 = Math.max( res[i-j]*j,(i-j)*res[j] );
int temp2 = Math.max((i-j)*j,res[i-j]*res[j]);
int max = Math.max(temp1,temp2);
res[i] = Math.max(res[i],max);
}
}
return res[n];
}
}