Submission #1325246

#TimeUsernameProblemLanguageResultExecution timeMemory
1325246eri16메기 농장 (IOI22_fish)C++20
18 / 100
49 ms8016 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W){
    bool evn=true;
    bool lwr=true;
    ll sm1=0;
    ll sm2=0;
    
    int sub_2[N][2];
    
    for (int i=0; i<N; i++){
        for (int j=0; j<2; j++){
            sub_2[i][j]=0;
        }
    }
    
    for (int i=0; i<M; i++){
        if (X[i]%2){evn=false;sm1+=W[i];sub_2[Y[i]][X[i]%2]=W[i];}
        else{sm2+=W[i];sub_2[Y[i]][X[i]%2]=W[i];}
        if (X[i]>1){lwr=false;}
    }
    
    if (evn){return (sm1+sm2);}
    if (lwr && N==2){return max(sm1,sm2);}
    
    if (lwr){
        vector<ll> A(N+1,0), B(N+1,0);
        for (int i=0; i<N; i++){
            A[i+1]=A[i]+sub_2[i][0];
            B[i+1]=B[i]+sub_2[i][1];
        }
        ll ans=0;
        for (int i=0; i<=N; i++) {
            ans=max(ans, B[N]-B[i]+A[i]);
        }
        return ans;        
    }
    
    
    
    
    vector <int> w(N,0);
    
    for (int i=0; i<M; i++){w[X[i]]=W[i];}
    
    ll dp[N][2];
    
    dp[0][0]=0;
    dp[0][1]=0;
    dp[1][0]=w[1];
    dp[1][1]=w[0];
    
    for (int i=2; i<N; i++){
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]+w[i]);
        
        dp[i][1]=max({dp[i-1][0],dp[i-1][1],dp[i-2][0]+w[i-1]});
    }
    
    return max(dp[N-1][0],dp[N-1][1]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...