class Solution {
public int integerBreak(int n) {
int[] dp = new int[n+1];
dp[0] = 0;
dp[1] = 0;
for(int i = 2;i<=n;i++){
int max = 0;
for(int j = 1;j<i;j++){
int val = Math.max(j*(i-j),j*dp[i-j]);
dp[i] = Math.max(val,dp[i]);
}
}
return dp[n];
}
}
class Solution {
public int numTrees(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1 ] =1;
for(int i =2;i<=n;i++){
for(int j =1;j<=i;++j){
dp[i] +=dp[j-1]*dp[i-j];
}
}
return dp[n];
}
}