题意:求最长子序列
#include<iostream>
#include<cstring>
using namespace std;
int max(int x,int y)
{
if(x>y) return x;
return y;
}
int map[1001][1001];
char s1[1001],s2[1001];
int main()
{
while(cin>>s1+1>>s2+1)
{
memset(map,0,sizeof(map));
int l1=strlen(s1+1);
int l2=strlen(s2+1);
for(int i=1;i<=l1;i++)
for(int j=1;j<=l2;j++)//每次取i段与l2比较 取最大值
{
if(s1[i]==s2[j])
map[i][j]=max(map[i-1][j],map[i-1][j-1]+1);//有两个状态1 取(i-1)段算到j时的最大值 也就是上一次算的这是一个状态
//2取i-1段算到j-1时的最大值+1
//这是一个决策
else
map[i][j]=max(map[i-1][j],map[i][j-1]);
}
cout<<map[l1][l2]<<endl;
}
return 0;
}
原文:http://www.cnblogs.com/zhangdashuai/p/3709708.html