zoukankan      html  css  js  c++  java
  • 最长公共子序列

    /*
    最长公共子序列
    */
    #include<iostream>
    #include<string>
    #define max(x, y) a>b?a:b
    #define For(t, i, j) for(t = i; t <= j; t++)
    #define MAXM 100
    #define MAXN 100
    
    using namespace std;
    
    int c[MAXM][MAXN], b[MAXM][MAXN];
    
    string x, y;
    
    void Print_LCS(int i, int j)
    {
    	if(i == 0 || j == 0) return;
    	if(b[i][j] == 1)
    	{
    		Print_LCS(i-1, j-1);
    		cout<<x[i-1];
    	}
    	else if(b[i][j] == 2) 
    		Print_LCS(i-1, j);
    	else 
    		Print_LCS(i, j-1);
    }
    
    void LCS()
    {
    	int i, j, m = x.length(), n = y.length();
    
    	For(i, 0, m) c[i][0] = 0;
    	For(j, 0, n) c[0][j] = 0;
    
    	For(i, 1, m)
    		For(j, 1, n)
    	{
    		if(x[i-1] == y[j-1])
    		{
    			c[i][j] = c[i-1][j-1] + 1;
    			b[i][j] = 1;//左上
    		}
    		else if(c[i-1][j] >= c[i][j-1])
    		{
    			c[i][j] = c[i-1][j];
    			b[i][j] = 2;//正上
    		}
    		else 
    		{
    			c[i][j] = c[i][j-1];
    			b[i][j] = 3;//左
    		}
    	}
    
    	cout<<"最长为:"<<c[m][n]<<endl;
    	Print_LCS(m, n);
    	cout<<endl;
    }
    
    int main()
    {
    
    	// abcbdab bdcaba
    	cin>>x>>y;
    	LCS();
    
    	system("pause");
    	return 0;
    }
    

      

    世上无难事,只要肯登攀。
  • 相关阅读:
    [算法]最长子数组问题
    [算法]K-SUM problem
    selenium-远程调用
    pytest-fixture
    Ubuntu18.04中安装virtualenv和virtualenvwrapper
    shell
    mac保存远程链接
    css
    js基础
    css基础
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3439860.html
Copyright © 2011-2022 走看看