343. 整数拆分
int* initDP(int num)
{
int* dp = (int*)malloc(sizeof(int) * (num + 1));
int i;
for (i = 0; i <= num; i++)
{
dp[i] = 0;
}
return dp;
}
int max(int num1, int num2, int num3)
{
int temp = num1 > num2 ? num1 : num2;
return temp > num3 ? temp : num3;
}
int integerBreak(int n){
int* dp = initDP(n);
int i, j;
dp[2] = 1;
for (i = 3; i <= n; i++)
{
for (j = 1; j <= i/2; j++)
{
dp[i] = max(dp[i], j*(i-j), j*dp[i-j]);
}
}
int result = dp[n];
free(dp);
return result;
}
96. 不同的二叉搜索树
int* initDP(int num)
{
int* dp = (int*)malloc(sizeof(int) * (num + 1));
int i;
for (i = 0; i <= num; i++)
{
dp[i] = 0;
}
return dp;
}
int numTrees(int n){
int* dp = initDP(n);
dp[0] = 1;
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
dp[i] += dp[j - 1] * dp[i - j];
}
}
int result = dp[n];
free(dp);
return result;
}