poj1458 hdu1159
2015-08-13 21:46
337 查看
题目大意:
给定两个字符串序列,输出其中包含的最长的子序列的长度。
输入的两个对比的字符串以若干空格分割(这就涉及到了读入两个字符串的技巧)
输出:最长公共子序列的长度
LCS问题,经典的动态规划问题
从c[i][j]={0 //当i=0或者j=0;
c[i-1][j-1]+1 //当 i,j>0 并且xi=yj;
max{c[i[-][j],c[i][j-1]} //当i,j>0 并且 xi与yj不等}
代码如下:
给定两个字符串序列,输出其中包含的最长的子序列的长度。
输入的两个对比的字符串以若干空格分割(这就涉及到了读入两个字符串的技巧)
输出:最长公共子序列的长度
LCS问题,经典的动态规划问题
从c[i][j]={0 //当i=0或者j=0;
c[i-1][j-1]+1 //当 i,j>0 并且xi=yj;
max{c[i[-][j],c[i][j-1]} //当i,j>0 并且 xi与yj不等}
代码如下:
# include <iostream> using namespace std; char s1[1000]; char s2[1000]; int c[1001][1001]; int main() { /*char s1[1000]; char s2[1000]; int c[1001][1001];*/ while(scanf("%s",s1+1)!=EOF) { scanf("%s",s2+1); memset(c,0,sizeof(c)); int n,m,i,j,k; n=strlen(s1+1); m=strlen(s2+1); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(s1[i]==s2[j]) { c[i][j]=c[i-1][j-1]+1; } else { if (c[i-1][j]>c[i][j-1]) c[i][j]=c[i-1][j]; else c[i][j]=c[i][j-1]; } } } printf("%d\n",c [m]); } return 0; }
相关文章推荐