uva 111 History Grading

果的LCS,只不过输入的时候有trick
#include <stdio.h>

int n;
int str1[50], str2[50];

int LCS()
{
    
int dp[50][50], i, j;
    
for ( i = 0 ; i <= n ; i++ )
        dp[i][
0]= dp[0][i] = 0;
    
for ( i = 1 ; i <= n ; i++ )
        
for ( j = 1 ; j <= n ; j++ )
            
if (str1[i] == str2[j])
                dp[i][j]
= dp[i-1][j-1]+1;
            
else
                dp[i][j]
= dp[i-1][j] > dp[i][j-1? dp[i-1][j] : dp[i][j-1];
    
return dp[n][n];
}

int main()
{
    scanf(
"%d"&n);
    
int i, t;
    
for ( i = 0 ; i < n ; i++ )
    {
        scanf(
"%d"&t);
        str1[t]
= i+1;
    }
    
while ( EOF != scanf("%d"&t) )
    {
        str2[t]
= 1;
        
for ( i = 1 ; i < n ; i++ )
        {
            scanf(
"%d"&t);
            str2[t]
= i+1;
        }
        printf(
"%d\n", LCS());
    }
    
return 0;
}

posted on 2011-09-09 18:20 purplest 阅读(168) 评论(0)  编辑 收藏 引用 所属分类: DP


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿

随笔分类(70)

随笔档案(68)

ACMer

搜索

最新随笔

最新评论