求调
查看原帖
求调
507374
sqrtqwq楼主2024/10/26 22:24
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 1e6 + 10;
int dp[maxn],a[maxn],b[maxn];
int n;
int maxx[maxn];

signed main()
{
	int T;cin >> T;
	while(T--)
	{
		memset(dp,-63,sizeof(dp));dp[0] = 0;
		memset(maxx,-63,sizeof(maxx));
		cin >> n;
		for(int i = 1;i <= n;i++)cin >> a[i],b[i] = b[i - 1] + a[i] * (a[i] == a[i - 1]);
		for(int i = 1;i <= n;i++)
		{
			dp[i] = max(maxx[a[i]] + a[i] + b[i - 1],dp[i - 1]);
			maxx[a[i - 1]] = max(dp[i] - b[i - 1],maxx[a[i - 1]]);
		}
		cout << dp[n] << '\n';
	}
	return 0;
}

就是定义 dpidp_i 为前 ii 个数的答案

2024/10/26 22:24
加载中...