NYOJ 36最长公共子序列

 1 /*******************************************************
 2     状态转移方程:
 3     s1[i] == s2[j] 时,same[i,j] = 1;
 4     ans = max(a[i][j]+same[i,j], a[i][j-1], a[i-1][j])
 5 
 6 *****************************************************/
 7 #include<iostream>
 8 #include<cstring>
 9 #include<string>
10 using namespace std;
11 #define N 1005
12 int a[N][N];
13 string s1,s2;
14 
15 void dp()
16 {
17     int i,j;
18     memset(a,0,sizeof(a));
19     for(i = 0; i < s1.length(); i++)
20         for(j = 0; j < s2.length(); j++)
21         {
22             if(s1[i] == s2[j]) a[i+1][j+1] = a[i][j] + 1;
23             else a[i+1][j+1] = a[i+1][j]>a[i][j+1]?a[i+1][j]:a[i][j+1];
24         }
25 }
26 
27 int main()
28 {
29 //    freopen("in.txt","r",stdin);
30     int t;
31     cin>>t;
32     while(t--)
33     {
34         cin>>s1>>s2;
35         dp();
36         cout<<a[s1.length()][s2.length()]<<endl;
37     }
38     return 0;
39 }
posted @ 2013-04-09 21:40  YaLing  阅读(140)  评论(0编辑  收藏  举报