uvaoj111

来源:互联网 发布:ubuntu命令行支持中文 编辑:程序博客网 时间:2024/06/05 21:06

uvaoj111

  

   题意:  求公共最长子串

     注意: 题中的意思 

     4

     4 3 2 1 (  事件一发生的位置在第四位,事件二发生的位置在第3位 。。。)

     所以重新设置顺序后就可以直接求公共子串了



    详解来自:http://www.cnblogs.com/zpfbuaa/p/5049124.html  



    

 

#include<stdio.h>#include<string.h>#define max(a,b) a>b?a:bint s1[30],s2[30];int dp[30][30];int n;int dp_2( ){memset(dp,0,sizeof(dp));int  i,j;for( i = 1;i<=n;i++){for(j = 1;j <= n;j++){if(s1[i] == s2[j]){dp[i][j] = max(dp[i][j] , dp[i-1][j-1] + 1);}else{dp[i][j] = max(dp[i-1][j] ,dp[i][j-1]);}}}  return dp[n][n];}int main(){    int i,a;    scanf("%d",&n);for(i = 1;i<= n;i++){scanf("%d",&a);s1[a] = i;}i = 1;while(scanf("%d",&a)!=EOF){s2[a] =i++;if( i == n+1){i = 1;printf("%d\n",dp_2());}}     return 0;}

0 0
原创粉丝点击