哪位dalao看看哪里错了? 老是RE
查看原帖
哪位dalao看看哪里错了? 老是RE
519384
Link_Cut_Y楼主2021/8/16 13:38
#include<bits/stdc++.h>
#define int long long
#define reint register int
#define forr(i,a,b) for(reint i=(a);i<=(b);i++)
using namespace std;

const int N=2010;
int a[N];
int b[N];
int f[N][N];

bool digit(char x)
{
    return (x>='0' && x<='9');
}
inline int read()
{
	int x=0;
	int f=1;
	char ch=getchar();
	while(!digit(ch))
	{
		if(ch=='-')
		{
			f=-1;
		}
		ch=getchar();
	}
	while(digit(ch))
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return x*f;
}

inline void write(int x)
{
    if(x<0)
	{
        putchar('-');
        x=-x;
    }
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}

signed main()
{
	int n;
	int sum=0;
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
	}
	for(int j=1;j<=n;j++)
	{
		b[j]=read();
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			f[i][j]=max(f[i-1][j],f[i][j-1]);
			if(a[i]==b[j])
			{
				f[i][j]=max(f[i][j],f[i-1][j-1]+1);
			}
		}
	}
	write(f[n][n]);
}

另外,有没有优化做法提供一下谢谢

2021/8/16 13:38
加载中...