Submission #48512

#TimeUsernameProblemLanguageResultExecution timeMemory
48512leehosu01수족관 3 (KOI13_aqua3)C++17
0 / 100
1084 ms58184 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll cut[300002],N,K; ll counte(int loc) { ll tot=0,dep=1ll<<54; for(int i=loc;i<N-2;i+=2) tot+=(cut[i+2]-cut[i])*(dep=min(dep,cut[i+1])); dep=1ll<<54; for(int i=loc;i>0;i-=2) tot+=(cut[i]-cut[i-2])*(dep=min(dep,cut[i-1])); return tot; } map<pair<pair<ll,ll>,int>,ll>MMP; ll pro(int l,int r,ll lo,int k) { // printf("%d %d %lld %d\n",r,l,lo,k); if(MMP.find({{r,l},k})!=MMP.end())return MMP[{{r,l},k}]; if(r<l||!k)return 0; ll Mi=r,maxx=0; for(int i=r+2;i<=l;i+=2) if(cut[i]<cut[Mi])Mi=i; for(int i=0;i<=k;i++)maxx=max(maxx,pro(l,Mi-2,cut[Mi],i)+pro(Mi+2,r,cut[Mi],k-i)); // printf("%lld %lld \n",cut[Mi]-lo,cut[r-1]-cut[l-1]); // printf("%d %d %lld %d::%lld \n",r,l,lo,k,maxx+(cut[Mi]-lo)*(cut[r-1]-cut[l-1])); return MMP[{{r,l},k}]=maxx+(cut[Mi]-lo)*(cut[r-1]-cut[l-1]); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin>>N; int i; ll aA[2]; for(i=0;i<N;i++) { cin>>aA[0]>>aA[1]; cut[i]=aA[i&1]; } cin>>K; printf("%lld",pro(1,N-1,0,K)); }
#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...