搜索
查看: 1536|回复: 0
打印 上一主题 下一主题

[动规]这个的东西zhen有趣LCS(最长公共子序列)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-20 20:51:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

样例输入:
5
5 6 4 3 9
6
6 3 9 5 6 9

样例输出:
3

代码:



  1. // Author: Ahalei
  2. // Date: 11 1, 2010
  3. // City: Wuhan
  4. // Website: www.ahalei.com
  5. // Title: LCS (Longest Common Subsequence)
  6. #include <cstdio>

  7. int max(int x,int y)
  8. {
  9.     return x>y?x:y;//三目运算符,返回x和y中较大的一个,如过这个不知道,百度一下
  10. }

  11. int main()
  12. {
  13.     int f[11][11]={0};
  14.     int a[11],b[11];
  15.     int n,m,i,j;
  16.    
  17.    
  18.     scanf("%d",&n);//读取第1个序列的长度
  19.     for(i=1;i<=n;i++)//读取第1个序列
  20.         scanf("%d",&a);
  21.     scanf("%d",&m);//读取第2个序列的长度
  22.     for(i=1;i<=m;i++)//读取第2个序列
  23.         scanf("%d",&b);
  24.    
  25.     //将序列a中的每个元素和序列b中的每个元素相比较
  26.     for(i=1;i<=n;i++)
  27.         for(j=1;j<=m;j++)
  28.         {
  29.             if(a[i]==b[j])//如果他们相等
  30.             {
  31.                 f[i][j]=f[i-1][j-1]+1;//就是他左上角的值(上一次他们相等的时候)+1
  32.             }
  33.             else//如果他们不相等
  34.             {
  35.                 f[i][j]=max(f[i-1][j],f[i][j]);
  36.                 f[i][j]=max(f[i][j-1],f[i][j]);
  37.             }
  38.         }
  39.     //f[n][m]就是他们的最长公共子序列的个数
  40.     printf("%d\n",f[n][m]);
  41.     return 0;
  42. }

复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表