赛时代码思路很奇特
查看原帖
赛时代码思路很奇特
576721
k_kk_sc03楼主2024/10/27 19:17

正确性很模糊但是过了

#include<bits/stdc++.h>
#define maxn 1000006
#define ll long long
using namespace std;
int t,df[maxn],n,ls[maxn];
ll ans = 0,a[maxn],dp[maxn];
int main(){
	ios::sync_with_stdio(NULL);
	cin.tie(0);
	cin >> t;
	while(t--){
		cin >> n;
		for(int i=1;i<=n;++i){
			cin >> a[i];
			ls[i] = df[a[i]];
			df[a[i]] = i;
		}
		ans = 0;
		for(int i=1;i<=n;++i){
			df[a[i]] = 0;
			dp[i] = dp[i-1];
			if(a[i]==a[i-1]){
				ans = ans+a[i];
				continue;
			}
			if(ls[i]!=0){
				dp[i] = max(dp[i],dp[ls[i]+1]+a[i]);
			}
		}
		cout << dp[n]+ans << endl;
	}
	return 0;
}
2024/10/27 19:17
加载中...