hdu 1159

题意:求最长子序列

#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;
}


原文地址:https://www.cnblogs.com/zhangdashuai/p/3709708.html