码迷,mamicode.com
首页 > 其他好文 > 详细

zoj1425 Crossed Matchings

时间:2014-06-08 23:09:50      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   a   

【题解】:

【代码】:

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 using namespace std;
 5 
 6 int dp[105][105];
 7 int N1,N2;
 8 int a[105],b[105];
 9 int main(){
10     int M;
11     scanf("%d",&M);
12     while(M--){
13         scanf("%d%d",&N1,&N2);
14         for(int i=1;i<=N1;i++) scanf("%d",&a[i]);
15         for(int i=1;i<=N2;i++) scanf("%d",&b[i]);
16 
17         memset(dp,0,sizeof(dp));
18         for(int i=1;i<=N1;i++){
19             for(int j=1;j<=N2;j++){
20                 if (a[i]==b[j]) dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
21                 if (a[i]!=b[j]) {
22                     int mati=-1,matj=-1;
23                     for(int p=j-1;p>=1;p--){//在第二行搜索可能匹配的位置
24                         if (b[p]==a[i]) {
25                             mati=p;break;
26                         }
27                     }
28                     for(int p=i-1;p>=1;p--){//在第一行搜索匹配b的位置
29                         if (a[p]==b[j]){
30                             matj=p;break;
31                         }
32                     }
33                     dp[i][j]=max(dp[i][j],dp[i-1][j]);
34                     dp[i][j]=max(dp[i][j],dp[i][j-1]);
35                     if(mati>0 && matj>0) dp[i][j]=max(dp[i][j],dp[matj-1][mati-1]+2);
36                 }
37             }
38         }
39 
40         cout<<dp[N1][N2]<<endl;
41     }
42     return 0;
43 }
View Code

 

zoj1425 Crossed Matchings,布布扣,bubuko.com

zoj1425 Crossed Matchings

标签:c   style   class   blog   code   a   

原文地址:http://www.cnblogs.com/little-w/p/3775471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!