Submission #476438

#TimeUsernameProblemLanguageResultExecution timeMemory
476438ogibogi2004K개의 묶음 (IZhO14_blocks)C++14
100 / 100
194 ms2532 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+6; const int MAXK=128; const int INF=2e9; int n,k; int a[MAXN]; int dp[2][MAXN]; int main() { cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; } dp[1][0]=0; for(int i=1;i<=n;i++)dp[1][i]=max(dp[1][i-1],a[i]); for(int j=2;j<=k;j++) { stack<pair<int,int> >s; dp[j%2][0]=INF; dp[1-j%2][0]=INF; for(int i=1;i<=n;i++) { int pr1=dp[1-j%2][i-1],pr2; while(!s.empty()&&a[s.top().second]<=a[i]) { pr1=min(pr1,s.top().first); s.pop(); } if(s.empty())pr2=INF; else pr2=dp[j%2][s.top().second]; dp[j%2][i]=min(pr1+a[i],pr2); s.push({pr1,i}); //cout<<dp[j%2][i]<<","<<pr1<<" "; } //cout<<endl; } cout<<dp[k%2][n]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...