http://www.tzcoder.cn/acmhome/problemdetail.do?method=showdetail&id=5752
题意:求两个串的最长公共子序列(顺序相同即为子序列)
dp[i+1][j+1]:表示0-i前i+1个为止的最长公共子序列
当a[i]==b[j]时,直接就是dp[i][j]+1;
其他:max(dp[i][j+1],dp[i+1][j])
#include<bits/stdc++.h> using namespace std; int dp[1005][1005]; char a[1005],b[1005]; int main() { int i,j,n,m; scanf("%s%s",a,b); int la=strlen(a),lb=strlen(b); for(i=0;i<la;i++){ for(j=0;j<lb;j++){ if(a[i]==b[j])dp[i+1][j+1]=dp[i][j]+1; else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]); } } printf("%d ",dp[la][lb]); }