最长上升子序列:
- dp[i],以下标i为结尾的最大长度
- dp[i] = max{ dp[j]+1 | j<i,a[j]<a[i] }
最长公共子序列:
- dp[i][j],串a的前i个和串b的前j个中最大的公共长度
- if(a[i-1]==b[j-1]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = max( dp[i-1][j] , dp[i][j-1] );
状态设定比较正常,转移方程要思考:
(要注意,串从0下标开始,但dp的下标是指前几个)
01背包
+