社区讨论

求助最长回文子序列

学术版参与者 4已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lo8befon
此快照首次捕获于
2023/10/27 15:51
2 年前
此快照最后确认于
2023/10/27 15:51
2 年前
查看原帖
WA了,求康康有什么问题
CPP
#include<bits/stdc++.h>
using namespace std;
int t;
int a[2000005];
int f[2000005];
//dfs(i,j)表示i~j最长回文子序列的长度
//dfs(i,j) = dfs(i+1,j-1)+2  {s[i] == s[j]}
//         = max(dfs(i+1,j),dfs(i,j-1)) {s[i] != s[j]}
int dfs(int a[],int l,int r)
{
	if(l == r) return 1;
	if(l > r) return 0;
	if(a[l] == a[r])
	{
		return dfs(a,l+1,r-1)+2;	
	}
	int sum1 = dfs(a,l,r-1),sum2 = dfs(a,l+1,r);
	return max(sum1,sum2);
} 
int main()
{
	cin>>t;
	while(t--)
	{
		int n; cin>>n;
		for(int i=1; i<=n; i++) cin>>a[i];
		cout<<dfs(a,1,n)<<endl;		
	}
	return 0;	
} 

回复

7 条回复,欢迎继续交流。

正在加载回复...