题号:整数划分343,不同的二叉搜索树96
这两题均为典型的动态规划,通过dp数组前面的项得到当前项。不同于斐波拉契的是这两题的递推公式将不再是前几项简单的相加相乘
其中整数划分要求最大值,这就意味着要遍历前n项所以比起斐波拉契多了一个for循环
for(let i = 3; i <= n; i++) {
for(let j = 1; j <= i / 2; j++) {
dp[i] = Math.max(dp[i], dp[i - j] * j, (i - j) * j)
}
}
而不同的二叉搜索树是前面所有情况累加在一起,这跟上一题一样要变历前n项来进行递推操作
for(let i = 2; i <= n; i++) {
for(let j = 1; j <= i; j++) {
dp[i] += dp[j-1] * dp[i-j];
}
}
对于数组初始化通常视情况而定,一般是前一项或前两项。
即使无法知道是前几项,只多不少一定不会错