llllmz

导航

DP19 最长公共子序列(一)C

建议直接网上看思路....

#include<stdio.h>

int max(int i,int j){
    if(i>j) return i;
    return j;
}
int maxlength[1001][1001];
int main(){
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF){
        char c=getchar();//读取换行
        char c1[1001];
        char c2[1001];
        for(int i=0;i<n;i++){
            scanf("%c",&c1[i]);
        }
        char z=getchar();//读取换行
        for(int i=0;i<m;i++){
            scanf("%c",&c2[i]);
        }
        for(int i=0;i<n;i++) maxlength[i][0]=0;
        for(int i=0;i<m;i++) maxlength[0][i]=0;
        for(int i=1;i<n;i++){
            for(int j=1;j<m;j++){
                if(c1[i-1]==c2[j-1]){
                    maxlength[i][j]=maxlength[i-1][j-1]+1;
                }else{
                    maxlength[i][j]=max(maxlength[i][j-1],maxlength[i-1][j]);
                }
            }
        }
        int maxn=maxlength[0][0];
        for(int i=1;i<n;i++){
            for(int j=1;j<m;j++){
                if(maxlength[i][j]>maxn) maxn=maxlength[i][j];
            }
        }
        printf("%d\n",maxn);
    }
    return 0;

结果:

posted on 2024-02-19 15:39  神奇的萝卜丝  阅读(15)  评论(0)    收藏  举报