关于题解/做法
查看原帖
关于题解/做法
1532269
ZEC_503305楼主2024/11/5 20:20

这篇题解 的做法,直接 WA 0 pts,求条

宣贯。

#include<bits/stdc++.h>
#define Fuck return
#define CCF 0
using namespace std;
typedef long long ll;
const int N=2e5+5,A=1e6+5;
int n,a[N],lst[A],pre[N],s[N],dp[N][2];
void solve() {
    cin>>n;
    for(int i=0;i<=1000000;i++) lst[i]=0;
    for(int i=0;i<=n;i++) pre[i]=s[i]=dp[i][0]=dp[i][1]=0;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
        pre[i]=lst[a[i]];
        lst[a[i]]=i;
    }
    for(int i=1;i<=n;i++) s[i]=s[i-1]+(a[i]==a[i-1]?a[i]:0);
    // for(int i=1;i<=n;i++) cout<<s[i]<<' ';
    // cout<<'\n';
    for(int i=1;i<=n;i++) {
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
        dp[i][1]=max(dp[i-1][0],dp[i-1][1]);
        if(pre[i]) {
            dp[i][0]=max(dp[i][0],a[i]+dp[pre[i]+1][1]+s[i-1]-s[pre[i]+1]);
            dp[i][1]=max(dp[i][1],a[i]+dp[pre[i]+1][0]+s[i-1]-s[pre[i]+1]);
        }
    }
    cout<<max(dp[n][0],dp[n][1])<<'\n';
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--) solve();
    Fuck CCF;
}

2024/11/5 20:20
加载中...