Common Subsequence-DP

update@2011-10-04
C++语言: 高亮代码由发芽网提供

//省略了头文件等
#define mymax(a,b) (a>b?a:b)
char A[1000+1];
char B[1000+1];
int dp[1000+10][1000+10];

int main(){
    while(scanf("%s%s",A,B) != EOF){
        memset(dp,0,sizeof(dp));
        int len_a = strlen(A),len_b = strlen(B);
        //A的每一个值都应该尝试和B的每一个值进行匹配
        for(int i = 0;i < len_a;i++){
            for(int j = 0;j < len_b;j++){
                if(i == 0 || j == 0){
                    if(A[i] == B[j]){
                        dp[i][j] = 1; //因为它们当中有一个为0所以最多只可能有一个匹配
                    }
                    else if(!(i==0 && j== 0)){
                        if(i == 0){
                            dp[0][j] = dp[0][j-1];
                        }else dp[i][0] = dp[i-1][0];
                    }continue;
                   
                }
                if(A[i] == B[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
                else dp[i][j] = mymax(mymax(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]);
        }
        printf("%d\n",dp[len_a-1][len_b-1]);
    }
    return 0;
}


链接:Common Subsequence
做了一个多星期的电信报表 = =/ 早知道不选什么软件工程了,坑爹啊。今天做了几个很水的dp题算是有那么点感觉了,比赛都是各种dp,鸭梨........