1. 程式人生 > >最長公共子序列【ccf中學計算機程式設計 基礎篇】

最長公共子序列【ccf中學計算機程式設計 基礎篇】

#include<cmath>
#include<iostream>
#include<limits.h>
#include<ctime>
using namespace std;
string s,t;
int dp[100][100]={0};
int dfs(int si,int ti)
{
    if(dp[si][ti]!=0)
    {
        return dp[si][ti];
    }

    int ans=0;
    if(si==0)
    {
        for(int i=0;i<=ti;i++)
        {
            if
(s[si]==t[i]) { dp[si][ti]=1; return 1; } } } if(ti==0) { for(int i=0;i<=si;i++) { if(s[i]==t[ti]) { dp[si][ti]=1; return 1; } } } // if(ti==0&&si==0)
// { // if(s[si]==t[ti]) // { // return 1; // } // } if(s[si]!=t[ti]) { for(int i=0;i<=ti-1;i++) { int temp=dfs(si,i); ans=max(ans,temp); } for(int i=0;i<=si-1;i++) { int temp=dfs(i,ti); ans=max(ans,temp); } } if
(s[si]==t[ti]) { int temp=dfs(si-1,ti-1)+1; ans=max(ans,temp); } //cout<<si<<" "<<ti<<" "<<ans<<endl; dp[si][ti]=ans; return ans; } int main() { //cin>>s>>t; s="bbabxbcfsdfdfdaffsfgggsggsdgdsfgdfgdfgsfdgdfsgdafdsafdaf"; t="batxbbcasfsdafgsdfgdsfgdfgerulopjuiyoizsdfasfafaeaergdfadfsafsdaf"; cout<<dfs(s.size()-1,t.size()-1)<<endl; cout<<(double)clock()/CLOCKS_PER_SEC; return 0; }