제출 #600732

#제출 시각아이디문제언어결과실행 시간메모리
600732isaachewUplifting Excursion (BOI22_vault)C++17
0 / 100
264 ms524288 KiB
#include <bits/stdc++.h> /* Lift ST3-6 are split up into half-subtasks ST2.5-5.5: simple DP? 5000ms time limit; 20p with brute force O((n/2)^5) 2:56 pm ST1/2: plain brute force (O(M*(sum(a_l)^2)) = O(n^5)) */ std::vector<int> uplifts; int main(){ int m; long long l; std::cin>>m>>l; int maxv=0; for(int i=-m;i<=m;i++){ int x; std::cin>>x; uplifts.push_back(x); maxv=std::max(x,maxv); } if(m*m*maxv*maxv<=100000000){ int tmv=m*(m+1)/2*maxv;//really only half of the max std::vector<int> values1(tmv,-1000000000);//positive std::vector<int> values2(tmv,-1000000000);//negative values1[0]=0; values2[0]=0; for(int k=1;k<=m;k++){ for(int x=0;x<uplifts[m+k];x++){ for(int y=tmv-1-k;y>=0;y--){ values1[y+k]=std::max(values1[y]+1,values1[y+k]); } } } for(int k=1;k<=m;k++){ for(int x=0;x<uplifts[m-k];x++){ for(int y=tmv-1-k;y>=0;y--){ values2[y+k]=std::max(values2[y]+1,values2[y+k]); } } } int totalmax=0; for(int i=0;i<tmv&&i-l<tmv;i++){ if(i-l<0)continue; totalmax=std::max(totalmax,values1[i]+values2[i-l]); } std::cout<<totalmax+uplifts[m]<<'\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...