zoukankan      html  css  js  c++  java
  • 最长公共子序列LCS

    51Nod 1006

    a[i][j]  为a1,a2...ai与b1,b2....bj最长的公共子序列。

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 const int N = 1e3+10;
     5 int a[N][N];
     6 char s[N], ss[N], sss[N];
     7 int main(){
     8     scanf("%s %s",s+1,ss+1);
     9     int i,j;
    10     for(i = 1; s[i]; i ++){
    11         for(j = 1; ss[j]; j ++){
    12             if(s[i] == ss[j]) a[i][j] = a[i-1][j-1] + 1;
    13             else a[i][j] = max(a[i-1][j],a[i][j-1]);
    14         }
    15     }
    16     i--;j--;
    17     int k = N -1;
    18     while(i > 0 && j > 0){
    19         if(s[i] == ss[j]){
    20             sss[k--] = s[i];
    21             i--;j--;
    22         }else if(a[i-1][j] > a[i][j-1]){
    23             i--;
    24         }else{
    25             j--;
    26         }
    27     }
    28     printf("%s
    ",sss+k+1);
    29     return 0;
    30 }
  • 相关阅读:
    07 JavaWeb
    06 XML编程(CRUD)
    05 XML
    04 DOM一窥
    03 Javascript初识
    02 CSS/javaScript
    01 HTML基础
    09_IO流
    08_集合概述
    07_基本数据类型和包装类
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7181848.html
Copyright © 2011-2022 走看看