dp(最长公共子序列)

#include <iostream>
#include <iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <set>
using namespace std;
int   v[509] , w[509] , dp[100009][100009] , a[100009] , dpp[100009], b[100009];
int len1 , len2 ;

// X = (x1 , x2 , x3 ,....,xn) , Y = (y1 , y2 , y3 ,.....,ym)

//最长公共子序列。将问题分为三个子问题:
//当xn == ym 时, 在x(n-1) 和 y(m-1)的两个序列的最长公共子序列上加一。。
//当xn != ym 时, 比较 x(n-1) 和 y(m) 的两个序列的最长子序列 与 x(n)和y(m-1)的两个序列的最长子序列 的最大值
int main()
{

    int n ;
    scanf("%d" , &n);
    while(n--)
    {
        int m ;
        scanf("%d" , &m);
        for(int i = 1 ; i  <= m ; i++)
        {
            scanf("%d" , &a[i]);
        }
        memset(dp , 0 , sizeof(dp));
        for(int i = 1 ; i <= m ; i++)
        {
            for(int j = i ; j <= m ; j++)
            {
                if(a[i] == b[j] )
                {
                    dp[i][j] = dp[i - 1][j - 1] + 1;

                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j] , dp[i][j - 1]);
                }
            }
        }

    }



    return 0;
}

 

上一篇:Linux——搭建本地ym仓库


下一篇:程序员的算法课(6)-最长公共子序列(LCS)