제출 #1055592

#제출 시각아이디문제언어결과실행 시간메모리
1055592vjudge1메기 농장 (IOI22_fish)C++17
0 / 100
108 ms62256 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; map<int,ll>fishies[100010]; map<int,ll>dp[100010][2]; ll ones(int col,int len){ return (--fishies[col].upper_bound(len))->second; } ll max_weights(int N,int M,vector<int> X,vector<int> Y,vector<int> W) { for(int i=0;i<M;i++) fishies[X[i]+1][Y[i]+1]=W[i]; for(int i=1;i<=N;i++){ fishies[i][N+1]; fishies[i][1]; auto it=++fishies[i].begin(); while(it!=fishies[i].end()) it->second+=prev(it)->second,it++; } fishies[N+1][0]; for(auto[i,j]:fishies[1]) dp[1][1][i-1]=ones(2,i-1); dp[0][0][0]; for(int i=2;i<=N;i++){ for(auto[rw,j]:fishies[i]) { ll K=0; for(auto[rw2,vl]:dp[i-2][0]) K=max(K,vl+ones(i+1,rw-1)+max(0ll,ones(i-1,rw-1)-ones(i-1,rw2))); for(auto[rw2,vl]:dp[i-2][1]) K=max(K,vl+ones(i+1,rw-1)+max(0ll,ones(i-1,rw-1)-ones(i-1,rw2))); dp[i][1][rw-1]=K; } for(auto[rw,vl]:dp[i-1][0]) { for(auto[rw2,j]:fishies[i]){ if(rw2-1>j) break; ll K=ones(i+1,rw2-1)-ones(i,rw2-1)+vl; dp[i][0][rw2-1]=max(dp[i][0][rw2-1],K); } } for(auto[rw,vl]:dp[i-1][1]){ for(auto[rw2,j]:fishies[i]){ ll K=ones(i+1,rw2-1)-ones(i,min(rw,rw2-1))+vl; dp[i][rw2>rw][rw2-1]=max(dp[i][rw2>rw][rw2-1],K); } } } ll ans=0; for(auto[i,j]:dp[N][0]) ans=max(ans,j); for(auto[i,j]:dp[N][1]) ans=max(ans,j); 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...