class Solution:
def integerBreak(self, n: int) -> int:
dp = [0] *(n+1)
dp[2]=1
if n <3:
return dp[n]
for i in range(3,n+1):
for j in range(1,n):
dp[i]=max(j*(i-j),j*dp[i-j],dp[i])
return dp[n]
class Solution:
def numTrees(self, n: int) -> int:
dp = [0]*(n+1)
dp[0]=1
dp[1]=1
for i in range(2,n+1):
for j in range(1,i+1):
dp[i]+=dp[j-1]*dp[i-j]
return dp[n]