各种经典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)
如有不足,欢迎指出!
这是mcr130102的博客,转载请注明出处