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

vijos 1111

时间:2018-01-23 16:41:58      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:一个   div   out   while   gpo   string   max   ace   name   

最长公共子序列。

设f[i][j]为前第一个序列前i和第二个序列前j的最长公共子序列。

f[i][j]=f[i-1][j-1] (a[i]=b[j])

f[i][j]=max(f[i-1][j],f[i][j-1]) (a[i]!=b[j])

#include"iostream"
#include"string"
using namespace std;
string a,b;
int f[101][101];
int main()
{
    while(cin>>a>>b)
    {
        for(int i=0; i<a.size(); i++)
            for(int j=0; j<b.size(); j++)
                if(a[i]==b[j]) f[i+1][j+1]=f[i][j]+1;
                else f[i+1][j+1]=max(f[i][j+1],f[i+1][j]);
        cout<<a.size()+b.size()-f[a.size()][b.size()]<<endl;
    }
    return 0;
}

 

vijos 1111

标签:一个   div   out   while   gpo   string   max   ace   name   

原文地址:https://www.cnblogs.com/TrassBlose/p/8336278.html

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