• HDU 1159 Common Subsequence:LCS(最长公共子序列)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159

    题意:

      求最长公共子序列。

     

    题解:

      (LCS模板题)

      表示状态:

        dp[i][j] = max len of LCS

        a串匹配到第i位,b串匹配到第j位,此时的最长公共子序列长度。

      如何转移:

        首先,一个明显的决策是,如果a[i] == b[j],那么此一定要匹配。(贪心)

        所以分两种情况:

          (1)a[i] == b[j]:dp[i][j] = dp[i-1][j-1] + 1

          (2)a[i] != b[i]:dp[i][j] = max(dp[i-1][j] , dp[i][j-1])

      求dp:两个for循环枚举i,j即可。

     

    AC Code:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define MAX_N 2005
     5 
     6 using namespace std;
     7 
     8 int lcs[MAX_N][MAX_N];
     9 string a,b;
    10 
    11 int main()
    12 {
    13     while(cin>>a>>b)
    14     {
    15         memset(lcs,0,sizeof(lcs));
    16         for(int i=1;i<=a.size();i++)
    17         {
    18             for(int j=1;j<=b.size();j++)
    19             {
    20                 if(a[i-1]==b[j-1]) lcs[i][j]=lcs[i-1][j-1]+1;
    21                 else lcs[i][j]=max(lcs[i-1][j],lcs[i][j-1]);
    22             }
    23         }
    24         cout<<lcs[a.size()][b.size()]<<endl;
    25     }
    26 }
  • 相关阅读:
    C#按模板生成word文档总结
    Aspose.Words.dll根据模板生成word
    WCF服务
    Fiddler抓包工具
    文本过长显示...
    java JDK 环境变量配置
    js return关键字
    js限制文本框输入内容
    jQuery学习一
    JSON 教程
  • 原文地址:https://www.cnblogs.com/Leohh/p/7375900.html
Copyright © 2020-2023  润新知