各种经典dp的状态转移方程

序言

记不住

正文

01背包

经典问题。

dp[i][j]=max{dp[i-1][j-v[i]]+c[i],dp[i-1][j]};

最长公共子串

dp[0][j] = 0; (0<=j<=m)
dp[i][0] = 0; (0<=i<=n)
dp[i][j] = dp[i-1][j-1] +1; (str1[i] == str2[j])
dp[i][j] = 0; (str1[i] != str2[j])

最长公共子序列

dp[0][j] = 0; (0<=j<=m)
dp[i][0] = 0; (0<=i<=n)
dp[i][j] = dp[i-1][j-1] +1; (str1[i-1] == str2[j-1])
dp[i][j] = max{dp[i][j-1],dp[i-1][j]}; (str1[i-1] != str2[j-1])

最长递增子序列(最长递减子序列)

因为两者的思路都是一样的,所以只给出最长递增子序列的状态转移方程。

F[x] = max{1,F[i]+1|ai<ax && i<x}

最大子序列和的问题

dp[1] = a1; (a1>=0 && i == 1)
dp[i] = dp[i-1]+ai; (ai>=0 && i>=2)
dp[i] = 0; (dp[i-1] + ai <=0 && i>=2)

如有不足,欢迎指出!

posted @ 2024-08-26 17:47  mcr130102  阅读(20)  评论(0编辑  收藏  举报
请不要抄袭任何人的博客,这是对一名开发者最基本的尊重。