why 0pts
查看原帖
why 0pts
511609
无钩七不改名楼主2024/11/5 18:15
#include<bits/stdc++.h>
using namespace std;

const int N=1000005;

int T,n,a[N];
long long dp[2][N],mx[2];

int read(){
	int ff=1,kk=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')ff=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		kk=kk*10+ch-'0';
		ch=getchar();
	}
	return ff*kk;
}

int main(){
	//cout<<log2(1000000000000000);50...
//	freopen("color.in","r",stdin);
//	freopen("color.out","w",stdout);
	T=read();
	while(T--){
		n=read();
		memset(dp,0xcf,sizeof dp);
		for(int i(1);i<=n;++i){
			a[i]=read();
			if(i==1){
				dp[0][0]=0;mx[0]=0;//mxx[0]=0;
				dp[1][0]=0;mx[1]=0;//mxx[1]=0;
			}
			else{
				if(a[i]!=a[i-1]){
					long long qwq1=dp[1][a[i]],qwq0=dp[0][a[i]];
					dp[0][a[i-1]]=max(mx[1],qwq1+a[i]);
					dp[1][a[i-1]]=max(mx[0],qwq0+a[i]);
					dp[0][a[i]]=qwq0+a[i];
					dp[1][a[i]]=qwq1+a[i];
					mx[0]=max(mx[0],max(dp[0][a[i-1]],dp[0][a[i]]));
					mx[1]=max(mx[1],max(dp[1][a[i-1]],dp[1][a[i]]));
				}
				else{
					long long qwq=max(dp[1][a[i]],dp[0][a[i]]);
					dp[0][a[i]]=max(mx[1],max(qwq,mx[0])+a[i]);
					dp[1][a[i]]=max(mx[0],max(qwq,mx[1])+a[i]);
					mx[0]=max(mx[0],max(dp[0][a[i-1]],dp[0][a[i]]));
					mx[1]=max(mx[1],max(dp[1][a[i-1]],dp[1][a[i]]));
				}
			}
			//cout<<mx[0]<<" "<<mx[1]<<'\n';
		}
		printf("%lld\n",max(mx[0],mx[1]));
	}
	return 0;
} 

RT.现在要回去准备期中考没时间看。

thx qwq

2024/11/5 18:15
加载中...