zoukankan      html  css  js  c++  java
  • HDU 1159 Common Subsequence

    原题链接:点击此处

    解题思路:

    详情可见,算法竞赛入门经典(刘汝佳的那本紫书)第二版275页。

    dp(i,j)表示的是A1,A2,A3....,Ai和B1,B2,B3...Bj的最长公共子序列(LCS)的长度。

    当A[i]=B[i]时,dp(i,j)=d(i-1,j-1)+1;

    否则dp(i,j)=max{dp(i,j),dp(i,j-1)};

    源代码如下:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    int dp[1001][1001];
    
    int max (int a ,int b )
    {
        if(a>b)
            return a;
        else
            return b;
    }
    
    
    int main()
    {
        char a[1001];
        char b[1001];
        int len1,len2;
        while(~scanf("%s %s",a,b))
        {
            len1=strlen(a);
            len2=strlen(b);
            for(int i=0;i<=len1;i++)
                dp[i][0]=0;
            for(int i=0;i<=len2;i++)
                dp[0][i]=0;
            for(int i=1;i<=len1;i++)
                for(int j=1;j<=len2;j++)
            {
                if(a[i-1]==b[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                else
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            }
            printf("%d
    ",dp[len1][len2]);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    RQNOJ 1 明明的随机数
    poj1284
    poj1061
    51nod1305
    51nod 1344
    poj2240
    poj1860
    使用SwitchToThisWindow时不切换问题
    c#拷贝整个文件夹到指定文件夹下(非递归)
    IniHelper
  • 原文地址:https://www.cnblogs.com/gdvxfgv/p/5767593.html
Copyright © 2011-2022 走看看