zoukankan      html  css  js  c++  java
  • 【模板】51nod 1006 最长公共子序列Lcs

    【题解】

      dp转移的时候记录一下,然后倒着推出答案即可。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define LL long long
     5 #define rg register
     6 #define N 2000
     7 using namespace std;
     8 int n,m,tot,f[N][N],from[N][N][2];
     9 char s1[N],s2[N],ans[N];
    10 int main(){
    11     scanf("%s",s1+1);
    12     scanf("%s",s2+1);
    13     n=strlen(s1+1); m=strlen(s2+1);
    14     for(rg int i=1;i<=n;i++)
    15         for(rg int j=1;j<=m;j++)
    16             if(s1[i]==s2[j]) f[i][j]=f[i-1][j-1]+1,from[i][j][0]=i-1,from[i][j][1]=j-1;
    17             else{
    18                 if(f[i-1][j]>f[i][j-1]) f[i][j]=f[i-1][j],from[i][j][0]=i-1,from[i][j][1]=j;
    19                 else f[i][j]=f[i][j-1],from[i][j][0]=i,from[i][j][1]=j-1;
    20             }
    21     while(n&&m){
    22         if(s1[n]==s2[m]) ans[++tot]=s1[n];
    23         int t1=from[n][m][0],t2=from[n][m][1];
    24         n=t1,m=t2;
    25     }
    26     for(rg int i=tot;i;i--) printf("%c",ans[i]);
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    北航算法作业三
    水库抽样
    python命名空间
    我说
    Fn键
    windows批处理运行java程序
    Java Sound初探
    java.io.IOException: mark/reset not supported
    三层交换机对链路层数据帧的处理
    北航数值分析作业三
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9571579.html
Copyright © 2011-2022 走看看