链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346
题意:经典LCS问题,最长公共子序列,状态转移方程if(a[i]=b[j])dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
const int m = 1000+10;
int dp[m][m];
int main()
{
char a[m];
char b[m];
while(gets(a)&&gets(b))
{
int l=strlen(a);
int h=strlen(b);
memset(dp,0,sizeof(dp));
for(int i=1;i<=l;i++){
for(int j=1;j<=h;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]);
}
}
cout << dp[l][h] << endl;
}
}