动态规划——最长公共子序列

给定两个序列X=ABCBDAB, Y=BDCABA,求X和Y的最长公共子序列

#include<stdio.h>
#include<string.h>
int max(int a,int b){
    if(a>b)return a;
    else return b;
}
void length(char *a,char *b,int m,int n){
    int c[m+1][n+1];
    for(int i=0;i<=m;i++){
        c[i][0]=0;
    }
    for(int i=0;i<=n;i++){
        c[0][i]=0;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;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",c[m][n]);
}
int main(){
    char a[100],b[100];
    scanf("%s",&a);
    scanf("%s",&b);
    int m=strlen(a);
    int n=strlen(b);
    length(a,b,m,n);
}

 

posted @ 2021-05-27 15:44  ....陈陈陈陈  阅读(195)  评论(0)    收藏  举报