详细布置?
今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。
视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili
这道题我知道dp等于分解后所能达到的最大值,就是不知道如何进行拆分。
class Solution(object):
def integerBreak(self, n):
dp=[0]*(n+1)
dp[2]=1
for i in range(3,n+1):
for j in range(1,i//2+1):
dp[i]=max(dp[i-j]*j,(i-j)*j,dp[i])
return dp[n]
我觉得我应该是理解了,下次应该可以做出来。
视屏讲解:动态规划找到子状态之间的关系很重要!| LeetCode:96.不同的二叉搜索树_哔哩哔哩_bilibili
class Solution(object):
def numTrees(self, n):
if n==1:
return 1
if n==2:
return 2
dp=[0]*(n+1)
dp[0]=1
for i in range(1,n+1):
for j in range(0,i+1):
dp[i]+=dp[j-1]*dp[i-j]
return dp[n]
这个确实是想不出来呢,不过在知道思路后,之后再写的话应该是没问题的了,主要还是思路。