CSP-S2024 T3 题解
设
第一个重要观察:若
证明考虑,若存在
其次可以发现,若
那么不考虑
问题转化为,求一个合法的线段集合,使其权值和尽量大。
那么有一个很不牛的 dp。设
洛谷民间数据过了。
int n, a[MAXN], lst[MAXN * 5];
ll f[MAXN];
int main() {
for (int T = read(); T--; ) {
read(n); rer(i, 1, n, a);
ll sum2 = 0;
rep1(i, 1, n) {
f[i] = f[i - 1];
if (lst[a[i]]) {
int l = lst[a[i]], r = i;
if (r - l == 1) sum2 += a[i];
else gmax(f[i], f[l + 1] + a[r]);
} lst[a[i]] = i;
} printf("%lld\n", f[n] + sum2);
rep1(i, 1, n) lst[a[i]] = 0;
}
return 0;
}