问题描述
我一直在遵循一种方法来帮助我解决动态编程问题的解决方案,在其中进行研究并找到一个递归解决方案,然后根据内部的参数和递归调用进行制表,以便更好地理解该过程。然后我优化是否可以看到一维版本。
我已经尝试着解决最长的子字符串问题,但是我完全困惑为什么将代码转换为列表2D格式时它不能正常工作(对于数组[4,2,3,6,10,1,12]
它返回4而不是5)。我将其包含在下面,任何帮助都将是惊人的!
具有备忘录的递归
def longest_increasing_subseq(arr):
@lru_cache(None)
def lis(idx,prevIdx):
if idx >= len(arr):
return 0
res = 0
if prevIdx == -1 or arr[prevIdx] < arr[idx]:
res = 1 + lis(idx + 1,idx)
return max(res,lis(idx + 1,prevIdx))
return lis(0,-1)
def longest_increasing_subseq_dp(arr):
n = len(arr)
dp = [[0] * n for _ in range(n)]
for i in range(n):
dp[i][i] = 1
res = 0
for idx in range(n-2,-1,-1):
for prevIdx in range(n):
if arr[prevIdx] < arr[idx]:
dp[idx][prevIdx] = max(1 + dp[idx+1][idx],dp[idx+1][prevIdx])
else:
dp[idx][prevIdx] = dp[idx+1][prevIdx]
res = max(res,dp[idx][prevIdx])
return dp
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)