题目:http://acm.hit.edu.cn/hoj/problem/view?id=1227
求LCS问题曾经写过装换为LIS版本的,使用二分法的:http://blog.csdn.net/niuox/article/details/7710924
这次写本应先写的DP解法,这个比较简单也比较经典:
DP方程:
1.当a[i] = b[j],c[i][j] = c[i-1][j-1] + 1;
2.当a[i]!=b[j],c[i][j] = max(c[i-1][j],c[i][j-1])
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
char a[1000];
char b[1000];
int c[1000][1000];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int r;
while(scanf(" %s %s",a,b) == 2)
{
memset(c,0,sizeof(c));
int la = strlen(a);
int lb = strlen(b);
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
if(a[i-1] == b[j-1])
{
c[i][j] = c[i-1][j-1] + 1;
}
else
{
c[i][j] = max(c[i-1][j],c[i][j-1]);
}
}
}
printf("%d\n",c[la][lb]);
}
return 0;
}