求助一个好像不太一样的dp
查看原帖
求助一个好像不太一样的dp
537719
hanss6楼主2024/10/27 09:50

赛时瞎蒙碰到死耗子蒙了一个方程能过大样例,刚刚优化了一下预处理过了,但是我不知道为啥,求大佬指点

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 1000005;

int n,T, a[N], lst[N], f[N], sum[N], ans; 


signed main() {
	cin >> T;
	while(T--) {
		cin >> n;
		memset(a, 0, sizeof a);
		memset(lst, 0, sizeof lst);
		memset(f, 0, sizeof f);
		memset(sum, 0, sizeof sum);
		for (int i = 1; i <= n; i++) cin >> a[i];
		for (int i = 2; i <= n; i++) {
			sum[i] = sum[i - 1];
			if(a[i] == a[i - 1]) sum[i] += a[i];
		} 
		for (int i = 1; i <= n; i++) {
			if (lst[a[i]] == 0) {
				lst[a[i]] = i;
				f[i] = f[i - 1];
			} else {
				f[i] = max(f[i - 1], max(f[lst[a[i]] + 1], f[lst[a[i]]]) + a[i] + sum[i]  - sum[lst[a[i]] + 1]);
				lst[a[i]] = i;
			}
		}
		
		cout << f[n] << endl;
	} 
	
	
	return 0;
}
2024/10/27 09:50
加载中...