Submission #776893

#TimeUsernameProblemLanguageResultExecution timeMemory
776893alexander707070Catfish Farm (IOI22_fish)C++17
52 / 100
722 ms224892 KiB
#include<bits/stdc++.h>
#define MAXN 3007
using namespace std;
 
int n,m,maxx;
long long pref[MAXN][MAXN],dp[MAXN][MAXN][2];
bool li[MAXN][MAXN][2];
long long prefmax[MAXN],prefmax2[MAXN];
long long suffmax[MAXN],suffmax2[MAXN];
 
long long max_weights(int N, int M,vector<int> X,vector<int> Y,vector<int> W){
    n=N; m=M;
    for(int i=0;i<m;i++){
        pref[X[i]+1][Y[i]+1]+=W[i];
    }
 
    for(int i=1;i<=n;i++){
        for(int f=1;f<=n;f++){
            pref[i][f]=pref[i][f]+pref[i][f-1];
        }
    }

    for(int pos=1;pos<=n;pos++){

        for(int last=0;last<=n;last++){
            prefmax[last]=dp[pos-1][last][1]-pref[pos][last];
            if(last>0)prefmax[last]=max(prefmax[last],prefmax[last-1]);

            prefmax2[last]=dp[pos-1][last][0];
            if(last>0)prefmax2[last]=max(prefmax2[last],prefmax2[last-1]);
        }

        for(int last=n;last>=0;last--){
            suffmax[last]=dp[pos-1][last][0]+pref[pos+1][last];
            suffmax[last]=max(suffmax[last],suffmax[last+1]);

            suffmax2[last]=dp[pos-1][last][0];
            suffmax2[last]=max(suffmax2[last],suffmax2[last+1]);
        }


        for(int last=0;last<=n;last++){
            for(int flag=0;flag<2;flag++){
                
                dp[pos][last][flag]=max(dp[pos][last][flag],prefmax[last]+pref[pos][last]);
                dp[pos][last][flag]=max(dp[pos][last][flag],prefmax2[last]);

                if(flag==0)dp[pos][last][flag]=max(dp[pos][last][flag],suffmax[last+1]-pref[pos+1][last]);
                dp[pos][last][flag]=max(dp[pos][last][flag],prefmax2[last+1]);
            }
        }
    }
 
    return dp[n][0][0];
}
 
/*
int main(){
    cout<<max_weights(5, 4, {0, 1, 4, 3}, {2, 1, 4, 3}, {5, 2, 1, 3})<<"\n";
}
*/
#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...