查看原帖
815386
_ZML_楼主2024/10/28 22:59
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200010],dp[200010];
int s[200010];
int l[1000010];
signed main(){
	int T; cin>>T;
	while(T--) {
		memset(l,0,sizeof(l));
		int n; cin>>n;
		for(int i=1;i<=n;i++) {
			cin>>a[i];
			s[i]=(a[i]!=a[i-1]?s[i-1]:s[i-1]+a[i]);
		}
		for(int i=1;i<=n;i++) {
			dp[i]=dp[i-1];
			if(l[a[i]]) {
				dp[i]=max(dp[i],dp[l[a[i]]+1]+a[i]+s[i]-s[l[a[i]]+1]);// 为什么是 dp[l[a[i]]+1],而不是dp[l[a[i]]]
			}
			l[a[i]]=i;
		}
		cout<<dp[n]<<"\n";
	}
	return 0;
}
2024/10/28 22:59
加载中...