class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n + 1);
dp[2] = 1;
for (int i = 3; i <= n ; i++)
{
for (int j = 1; j <= i / 2; j++)
{
dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
}
}
return dp[n];
}
};
96不同的二叉树
class Solution {
public:
int memo[20][20];
int numTrees(int n)
{
return count(1, n);
}
int count(int l,int h)
{
if(l>h) return 1;
if(memo[l][h]!=0) return memo[l][h];
int res = 0;
for (int i = l; i <= h; i++)
{
int left = count(l, i - 1);
int right = count(i + 1, h);
res += left * right;
}
memo[l][h]=res;
return res;
}
};