hdu 1159 Common Subsequence 动态规划

来源:互联网 发布:js发送短信验证码 编辑:程序博客网 时间:2024/05/16 04:53

题目传送门http://acm.hdu.edu.cn/showproblem.php?pid=1159

 

题意:寻找最长的 共同子序列   自学列 的顺序要求一致  但是和最长 字符串不同  这些字符没有必要挨着 

          比如  题目中的样例1   abcfbc abfcab  这两个 字符串 最长的 公共子序列是  abc  而最长公共字符串是ab

 

 

知道题意就能做了   用动态规划  一步步的 推,废话不说了  放代码

顺便 给大家推荐一个 动态规划 比较好的连接  个人看了这个 感觉写的蛮好的 http://blog.csdn.net/lyhvoyage/article/details/8545852

 

 

 

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char str1[2000],str2[2000];int dp[2000][2000],len1,len2;void  ys(){int i,j;for(i=1;i<=len1;i++)  for(j=1;j<=len2;j++)  {  if(str1[i]==str2[j])    dp[i][j]=dp[i-1][j-1]+1;  else     dp[i][j]=max(dp[i][j-1],dp[i-1][j]);  }}int main(){while(~scanf("%s%s",str1+1,str2+1))          //str+1  的意思是从字符串str的str[1]开始存储 因为 用dp的二维数组 方便运算就这样输入了 {memset(dp,0,sizeof(dp));len1=strlen(str1+1);len2=strlen(str2+1);ys();printf("%d\n",dp[len1][len2]);}return 0;}


 

 

 

 

 

 

0 0
原创粉丝点击