Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 35595 | Accepted: 14185 |
Description
Input
Output
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
-----------------------------------------------------------------------------
状态转移方程:
if(st1[i]==st2[j])
res[i+1][j+1]=res[i][j]+1;
else
res[i+1][j+1]= res[i][j+1]>res[i+1][j] ?res[i][j+1]:res[i+1][j] ;
res[i][j]表示字符串字串st1[0-i],st2[0-j]的公共子序列长度。
#include<stdio.h> #include<stdlib.h> //最长公共子序列,别的不说了 #include<string.h> #define MAX 1001 //唯一注意的是数组的大小 #define Max(x,y) (x)>(y)?(x):(y) int main() { char string1[MAX]; char string2[MAX]; //char string1a[26]; //char string1b[26]; int string[MAX][MAX]; int max1,max2,i,j; while(scanf("%s%s",string1,string2)!=EOF) { memset(string, 0, sizeof(string)); //gets(string1); //gets(string2); //memset(c,0,sizeof(string)); max1=strlen(string1); max2=strlen(string2); for(i=1;i<=max1;i++) for(j=1;j<=max2;j++) { if(string1[i-1]==string2[j-1]) { string[i][j]=string[i-1][j-1]+1;//关键1 } else string[i][j] = Max(string[i][j-1], string[i-1][j]);//关键2 } printf("%d\n",string[max1][max2]); } return 0; }
POJ 1458 Common Subsequence,布布扣,bubuko.com
原文:http://blog.csdn.net/zzucsliang/article/details/21388517