POJ 1458-Common Subsequence (动态规划)

      题目大意:就是找两个字符串的最长公共子序列的长度。

              例如: abcfbc  和 abfcab  的最长公共子序列为 abcb, 所以输出 4.

  /***************************************
    哎!!!  动态规划 实在是 太深奥了啊!
    这题又是 看的 别人的代码,
    又是用一个二维数组存放子问题的结果的方法。
    (和zipper那题 差不多)
  ## 看别人代码的时候发现一种方法,可以在输入%s的时候
     不从str[0]开始存放,
     可以用 scanf("%s", &str[1]); 表示从角标1 开始存放字符串

***************************************/

 

#include <stdio.h> #include <string.h>  #define  Max(x,y)  (x)>(y)?(x):(y) int main() {     int  i, j;     int  L1, L2, com[500][500];     char str1[500], str2[500];     while(scanf("%s %s", str1, str2)!=EOF)     {         L1 =strlen(str1);         L2 =strlen(str2);         memset(com, 0, sizeof(com));         for(i=1; i<=L1; i++)           for(j=1; j<=L2; j++)           {               if(str1[i-1] == str2[j-1])                  com[i][j] = com[i-1][j-1] + 1;               else                  com[i][j] = Max(com[i][j-1], com[i-1][j]);           }         printf("%d/n", com[L1][L2]);     } } 

你可能感兴趣的:(POJ 1458-Common Subsequence (动态规划))