社区讨论

求助最长回文子序列

灌水区参与者 4已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@lo8begyb
此快照首次捕获于
2023/10/27 15:51
2 年前
此快照最后确认于
2023/10/27 15:51
2 年前
查看原帖
RT,有T组数据,这是我的代码,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;	
} 

回复

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

正在加载回复...