最长公共子序列

来源:互联网 发布:js获取三个月前的日期 编辑:程序博客网 时间:2024/05/01 22:22
if(a[i]==a[j])  dp[i][j]=dp[i-1][j-1]+1为什么是减一呢?其实很简单最后一个匹配成功那它的最大值一定是前面的加一得来的。else   dp[i][j]=max{dp[i-1][j],dp[i][j-1]};这里也是一样的道理。
#include<stdio.h>#include<string.h>int a[100],b[1000],n,m,c[101][101];void fun(){memset(c,0,sizeof c);int i,j,k;for(i=1;i<=n;i++)for(j=1;j<=m;j++){if(a[i]==b[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];elsec[i][j]=c[i][j-1];}}return ;}int main(){   int t,i,j,k;   scanf("%d",&t);   while(t--)   {   scanf("%d",&n);   for(i=1;i<=n;i++)scanf("%d",a+i);   scanf("%d",&m);   for(i=1;i<=m;i++)scanf("%d",b+i);   fun();printf("%d\n",c[n][m]);   }   return 0;}

                                             
0 0
原创粉丝点击