CSU 1120 病毒(DP)

 题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120

解题报告:dp,用一个串去更新另一个串,递推方程是:

if(b[i] > a[j])
m = max(m,dp[j]);
else if(b[i] == a[j]) dp[j] = m + 1;

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn = 1005;
 7 int a[maxn],b[maxn],dp[maxn];
 8 
 9 int main()
10 {
11     int T,n,m;
12     scanf("%d",&T);
13     while(T--)
14     {
15         scanf("%d",&n);
16         for(int i = 1;i <= n;++i)
17         scanf("%d",&a[i]);
18         scanf("%d",&m);
19         for(int i = 1;i <= m;++i)
20         scanf("%d",&b[i]);
21         memset(dp,0,sizeof(dp));
22         for(int i = 1;i <= m;++i)
23         {
24             int m = 0;
25             for(int j = 1;j <= n;++j)
26             {
27                 if(b[i] > a[j])
28                 m = max(m,dp[j]);
29                 else if(b[i] == a[j]) dp[j] = m + 1;
30             }
31         }
32         int ans = 0;
33         for(int i = 1;i <= n;++i)
34         ans = max(ans,dp[i]);
35         printf("%d\n",ans);
36     }
37     return 0;
38 }    
View Code

 

转载于:https://www.cnblogs.com/xiaxiaosheng/p/4013504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值