题目没啥好说的就是dp
但是
超时代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
#define ll long long
const ll inf=0x3f3f3f3f;
#define read(x) scanf("%lld",&x)
map<ll,ll>mp;
ll dp[10005];
ll a[10005];
int main()
{
ll n;read(n);
ll m;read(m);
for(int i=1;i<=m;i++)
{
ll temp;
read(temp);
mp[temp]=i;
}
ll l;read(l);
ll num=1;
for(int i=1;i<=l;i++)
{
ll temp;
read(temp);
if(mp[temp]==0)continue;
a[num++]=temp;
}
ll maxn=0;
for(int i=1;i<num;i++)
{
for(int j=0;j<i;j++)
{
if(mp[a[i]]>=mp[a[j]]&&mp[a[i]]!=0)
{
dp[i]=max(dp[i],dp[j]+1);
}
}
maxn=max(dp[i],maxn);
}
cout<<maxn<<'\n';
}
AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
#define ll long long
const ll inf=0x3f3f3f3f;
#define read(x) scanf("%lld",&x)
ll mp[1005];
ll dp[10005];
ll a[10005];
int main()
{
ll n;read(n);
ll m;read(m);
for(int i=1;i<=m;i++)
{
ll temp;
read(temp);
mp[temp]=i;
}
ll l;read(l);
ll num=1;
for(int i=1;i<=l;i++)
{
ll temp;
read(temp);
if(mp[temp]==0)continue;
a[num++]=temp;
}
ll maxn=0;
for(int i=1;i<num;i++)
{
for(int j=0;j<i;j++)
{
if(mp[a[i]]>=mp[a[j]]&&mp[a[i]]!=0)
{
dp[i]=max(dp[i],dp[j]+1);
}
}
maxn=max(dp[i],maxn);
}
cout<<maxn<<'\n';
}
用了map就超时,真的要卡这么严🏇