Submission #1223341

#TimeUsernameProblemLanguageResultExecution timeMemory
1223341brintonCatfish Farm (IOI22_fish)C++20
0 / 100
1002 ms2162688 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; long long max_weights(int N, int M, vector<int> X, vector<int> Y,vector<int> W) { vector<vector<long long>> fish(N,vector<long long>(N,0)); for(int i = 0;i < M;i++){ fish[X[i]][Y[i]] = W[i]; } vector<vector<long long>> pref = fish; for(int x = 0;x < N;x++){ for(int y = 1;y < N;y++) pref[x][y] += pref[x][y-1]; } auto sum = [&](int x,int l,int r){ if(x >= N || x < 0) return 0LL; if(l == 0) return pref[x][r]; if(l > r) return 0LL; return pref[x][r]-pref[x][l-1]; }; vector dpinc(N,vector(N,0LL)); vector dpdec(N,vector(N,0LL)); auto vmax = [&](vector<long long>& v){ return *max_element(v.begin(),v.end()); }; for(int cx = 1;cx < N;cx++){ // dp inc for(int py = 0;py < N;py++){ for(int cy = py;cy < N;cy++){ dpinc[cx][cy] = max(dpinc[cx][cy],dpinc[cx-1][py]+sum(cx-1,py+1,cy)); } } // dp dec for(int py = 0;py < N;py++){ for(int cy = 0;cy <= py;cy++){ dpdec[cx][cy] = max(dpdec[cx][cy],dpdec[cx-1][py]+sum(cx,cy+1,py)); dpdec[cx][cy] = max(dpdec[cx][cy],dpinc[cx-1][py]+sum(cx,cy+1,py)); } } if(cx == 1){ for(int cy = 0;cy < N;cy++){ long long prevV = sum(cx-1,0,cy); dpinc[cx][cy] = max(dpinc[cx][cy],prevV); dpdec[cx][cy] = max(dpdec[cx][cy],prevV); } continue; } // skip one for(int py = 0;py < N;py++){ for(int cy = 0;cy < N;cy++){ long long prevV = max(dpinc[cx-2][py],dpdec[cx-2][py])+sum(cx-1,0,max(py,cy)); dpinc[cx][cy] = max(dpinc[cx][cy],prevV); dpdec[cx][cy] = max(dpdec[cx][cy],prevV); } } // skip two if(cx == 2) continue; long long two_empty = max(vmax(dpinc[cx-3]),vmax(dpdec[cx-3])); for(int cy = 0;cy < N;cy++){ dpinc[cx][cy] = max(dpinc[cx][cy],two_empty); dpdec[cx][cy] = max(dpdec[cx][cy],two_empty); } } long long ans = max(vmax(dpinc[N-1]),vmax(dpdec[N-1])); for(int ly = 0;ly < N;ly++){ ans = max(ans,dpinc[N-2][ly]+sum(N-1,0,ly)); ans = max(ans,dpdec[N-2][ly]+sum(N-1,0,ly)); } return ans; }
#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...