为什么会爆0
查看原帖
为什么会爆0
429705
luca227楼主2024/11/9 20:40
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1000005],dp[1000005],sum[1000005],last[10000005];
bool co[1000005];
signed main(){
	int T;
	cin>>T;
	while(T--){
		memset(dp , 0 , sizeof(dp));
	memset(last , 0 , sizeof(last));
	memset(sum , 0 , sizeof(sum));
		int n;
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=2;i<=n;i++){
			if(a[i]==a[i-1])
			sum[i]=sum[i-1]+a[i];
			else
			sum[i]=sum[i-1];
		}
		for(int i=1;i<=n;i++){
			dp[i]=dp[i-1];
			if(last[a[i]])
			dp[i]=max(dp[i],dp[last[a[i]]+1]+(sum[i]-sum[last[a[i]+1]]+a[i]));
			last[a[i]]=i;
		}
		cout<<dp[n]<<endl;
	}
}

2024/11/9 20:40
加载中...