动态规划入门——Common Subsequence(最长公共子序列)

转载请注明出处:http://blog.csdn.net/a1dark

分析:经典模型、推出状态转移方程就行了、

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1001
char str1[N];
char str2[N];
int dp[N][N];
int main(){
    while(scanf("%s%s",&str1,&str2)!=EOF){
        int len1=strlen(str1);
        int len2=strlen(str2);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                if(str1[i-1]==str2[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\n",dp[len1][len2]);
    }
    return 0;
}


你可能感兴趣的:(ACM,动态规划入门)