CSU 1120 病毒(DP)

时间:2022-02-28 13:23:24

题目链接: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;

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = ;
int a[maxn],b[maxn],dp[maxn]; int main()
{
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i = ;i <= n;++i)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i = ;i <= m;++i)
scanf("%d",&b[i]);
memset(dp,,sizeof(dp));
for(int i = ;i <= m;++i)
{
int m = ;
for(int j = ;j <= n;++j)
{
if(b[i] > a[j])
m = max(m,dp[j]);
else if(b[i] == a[j]) dp[j] = m + ;
}
}
int ans = ;
for(int i = ;i <= n;++i)
ans = max(ans,dp[i]);
printf("%d\n",ans);
}
return ;
}