zoukankan      html  css  js  c++  java
  • 动态规划经典例题(二)

    最长公共子列:

       

     

    输入:

           Abcfbc  abfcab

           Programming  contest

           Abcd  mnp

    输出:

           4

           2

           0

     

    解题思路:

           和最求最长上升子列一样,先设定一个数组存储比较过的状态maxlen[][],一步步的从子问题推到最终问题

           设一个二维数组maxlen[][]

    最长公共子串

    a

    d

    c

    b

    a

    1

    1

    1

    1

    b

    1

    1

    1

    2

    c

    1

    1

    2

    2

    d

    1

    2

    2

    1

           取一个子串内的字母,和另一个子串依次比较

            

      代码如下

        

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 char s1[1000],s2[1000];//两个字符数组
     6 int maxlen[1000][1000];//计数数组
     7 
     8 int main()
     9 {
    10     int i,j;
    11     while(cin>>s1>>s2)//输入两个数组,作为开始 
    12     {
    13         int m = strlen(s1);
    14         int n = strlen(s2);
    15         
    16         //表格初始化 
    17         for(i=1;i<=m;i++)
    18             maxlen[i][0]=0;
    19         for(j=1;j<=n;j++)
    20             maxlen[0][j]=0;
    21             
    22         //取一个数组,一个个的跟另一个数组从头到尾比较
    23         for(i=1;i<=m;i++) 
    24         {
    25             for(j=1;j<=n;j++)
    26                 if(s1[i]==s2[j])
    27                     maxlen[i][j]=maxlen[i-1][j-1]+1;
    28                 else
    29                     maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1]);
    30                 
    31         }    
    32         
    33         cout<<maxlen[m][n];    
    34     }
    35     
    36     
    37     
    38     
    39     
    40     
    41     return 0;
    42 } 
    43  
    View Code

     

          

  • 相关阅读:
    浅谈三层模式
    javascript的全局变量
    BZOJ 3668 NOI2014 起床困难综合症 贪心
    调试经验--图像
    Mac OS X 10.10 执行 Eclipse 提示须要安装 Java
    ubuntuOS
    BLOB存储图片文件二进制数据是非对错
    API经济产业
    python模块目录文件后续
    MongoDB命令
  • 原文地址:https://www.cnblogs.com/printwangzhe/p/12318908.html
Copyright © 2011-2022 走看看