제출 #102799

#제출 시각아이디문제언어결과실행 시간메모리
102799brcodeK blocks (IZhO14_blocks)C++14
100 / 100
266 ms41460 KiB
#include <iostream> #include <stack> using namespace std; const int MAXN = 1e5+5; int arr[MAXN]; int dp[110][MAXN]; int main(){ int n,k; cin>>n>>k; for(int i=0;i<=n;i++){ for(int j=0;j<=k;j++){ dp[j][i] = 1e9; } } dp[1][0] = 0; for(int i=1;i<=n;i++){ cin>>arr[i]; dp[1][i] = 0; dp[1][i] =max(dp[1][i-1],arr[i]); } dp[1][0] = 1e9; for(int i=2;i<=k;i++){ stack<int> s1,s2; for(int j=1;j<=n;j++){ int tempdp = dp[i-1][j-1]; while(s1.size() && s1.top()<arr[j]){ tempdp = min(tempdp,s2.top()); s1.pop(); s2.pop(); } if(s1.empty()||tempdp+arr[j]<s1.top()+s2.top()){ s1.push(arr[j]); s2.push(tempdp); // cout<<arr[j]<<" "<<tempdp<<endl; } if(j>=i){ dp[i][j] = s1.top()+s2.top(); //cout<<dp[i][j]<<endl; } } } cout<<dp[k][n]<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...