8分区间DP求助
查看原帖
8分区间DP求助
794291
qiuyongle楼主2023/3/25 19:19
#include<bits/stdc++.h>
using namespace std;
long long f[250][250][3],a[250],n;
int main(){
	cin>>n;
	memset(f,0,sizeof(f));
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
		f[i][i][0]=f[i][i][1]=f[i][i][2]=a[i];
	for(int l=2;l<=n;l++)
		for(int i=1;i<=n-l+1;i++){
			int j=i+l-1;
			if(a[i]==a[i+1])
				f[i][j][1]=max(f[i+1][j][1]+1,a[i]);
			else
				f[i][j][1]=a[i];
			if(a[j]==a[j-1])
				f[i][j][2]=max(f[i][j-1][2]+1,a[j]);
			else
				f[i][j][2]=a[j];
			f[i][j][0]=max(f[i][j-1][0],max(f[i+1][j][0],max(f[i][j][1],f[i][j][2])));
		}
	cout<<f[1][n][0];
	return 0;		
}
2023/3/25 19:19
加载中...