码迷,mamicode.com
首页 > 其他好文 > 详细

8月26———动态规划lcs

时间:2014-08-27 16:21:27      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   for   ar   art   问题   

解决最长公共子序列问题:

求解的方法如图所示:

例如,设所给的两个序列为X=<A,B,C,B,D,A,B>和Y=<B,D,C,A,B,A>。由算法LCS_LENGTH和LCS计算出的结果如下图所示:

bubuko.com,布布扣

其模板可以写成

bubuko.com,布布扣
void lcss()
{
    int i,j;
    int sizex=str1.length();
    int sizey=str2.length();
    for(i=0;i<=sizex;i++)
        lcs[i][0]=0;
    for(i=0;i<=sizey;i++) 
        lcs[0][i]=0;

        for(i=1;i<=sizex;i++)
            for(j=1;j<=sizey;j++)
            {
                if(str1[i-1]==str2[j-1])
                    lcs[i][j]=lcs[i-1][j-1]+1;
                else
                    lcs[i][j]=lcs[i-1][j]>=lcs[i][j-1]?lcs[i-1][j]:lcs[i][j-1];
            }    
      
            
    cout<<lcs[sizex][sizey]<<endl;  
}  
View Code

也可以将数组进行压缩:

bubuko.com,布布扣
memset(lcs,0,sizeof(lcs));
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                if(str1[i-1]==str2[j-1])
                    lcs[i%2][j]=lcs[(i-1)%2][j-1]+1;
                else
                    lcs[i%2][j]=lcs[(i-1)%2][j]>lcs[i%2][j-1]?lcs[(i-1)%2][j]:lcs[i%2][j-1];
            }
    printf("%d\n",lcs[n%2][n]) ; 
View Code

 

 

训练题目:

http://acm.hdu.edu.cn/diy/contest_show.php?cid=24575

8月26———动态规划lcs

标签:style   blog   http   color   os   for   ar   art   问题   

原文地址:http://www.cnblogs.com/ly---1287/p/3939492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!