首页 > 学院 > 开发设计 > 正文

poj1458

2019-11-10 20:22:59
字体:
来源:转载
供稿:网友

题目大意:

计算两个字符串的最长公共子序列

解题思路:

标准算法,可以当做模板记住

代码如下:

#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>int n1,n2;char str1[500],str2[500];int c[500][500];void LCS(char str1[100],char str2[100], int n1,int n2,int c[500][500]){ int i,j; for(i=1;i<=n1;i++) c[i][0]=0; for(i=1;i<=n2;i++) c[0][i]=0; for(i=1;i<=n1;i++) { for(j=1;j<=n2;j++) { if(str1[i]==str2[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]; } } }}int main(){ int i,j; while(scanf("%s",str1)==1) { scanf("%s",str2); n1=strlen(str1);n2=strlen(str2); for(i=n1-1;i>=0;i--) str1[i+1]=str1[i]; for(i=n2-1;i>=0;i--) str2[i+1]=str2[i]; LCS(str1,str2,n1,n2,c); PRintf("%d/n",c[n1][n2]); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表