标签:repr tput str1 contest inpu 问题 lin hit 子序列
题目:
Input
abcfbc abfcab programming contest abcd mnp
Output
4 2 0
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
题意描述:
输入两串英文字符
计算并输出两串字符的最长公共子序列的长度
解题思路:
属于DP问题。双重循环遍历,若对应字符一样,则最长子序列数加一;
若不一样,选择第一串字符当前长度-1和第二串字符当前长度的最长公共子序列的长度和第一串字符当前长度和第二串字符当前长度-1的最长公共子序列的长度中较大的长度。
代码实现:
1 #include<stdio.h> 2 #include<string.h> 3 char str1[1010],str2[1010]; 4 int maxlen[1010][1010]; 5 int main() 6 { 7 int l1,l2,i,j; 8 while(scanf("%s%s",str1+1,str2+1) != EOF) 9 { 10 l1=strlen(str1+1); 11 l2=strlen(str2+1); 12 for(i=0;i<=l1;i++) 13 maxlen[i][0]=0; 14 for(i=0;i<=l2;i++) 15 maxlen[0][i]=0; 16 for(i=1;i<=l1;i++) 17 { 18 for(j=1;j<=l2;j++) 19 { 20 if(str1[i]==str2[j]) 21 maxlen[i][j]=maxlen[i-1][j-1]+1; 22 else 23 maxlen[i][j]=maxlen[i-1][j]>maxlen[i][j-1]?maxlen[i-1][j]:maxlen[i][j-1]; 24 } 25 } 26 printf("%d\n",maxlen[l1][l2]); 27 } 28 return 0; 29 }
易错分析:
注意dp数组的初始化问题
标签:repr tput str1 contest inpu 问题 lin hit 子序列
原文地址:http://www.cnblogs.com/wenzhixin/p/7267948.html