uva 111 - History Grading (dp, LCS)

题目链接

题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2;

下面每一行是学生的答案,格式同上。

注意:这个给的顺序需要处理一下,不能直接用。

思路:LCS。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 using namespace std;
 7 #define Max(a,b)((a)>(b)?(a):(b))
 8 const int maxn= 20 + 10;
 9 int a[maxn], b[maxn], n, d[maxn][maxn];
10 
11 void LCS()
12 {
13     memset(d, 0, sizeof(d));
14     int i, j;
15     for(i = 1; i <= n; i++)
16     for(j = 1; j <= n; j++)
17     if(a[i]==b[j])
18         d[i][j] = d[i-1][j-1] + 1;
19     else
20         d[i][j] = Max(d[i-1][j], d[i][j-1]);
21     cout<<d[n][n]<<endl;
22 }
23 int main()
24 {
25     int i, x;
26     cin>>n;
27     for(i = 1; i <= n; i++)
28     {
29         cin>>x;
30         a[x] = i;
31     }
32     while(cin>>x)
33     {
34         b[x] = 1;
35         for(i = 2; i <= n; i++)
36         {
37             cin>>x;
38             b[x] = i;
39         }
40         LCS();
41     }
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/bfshm/p/3748481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值