제출 #337236

#제출 시각아이디문제언어결과실행 시간메모리
337236boykutK blocks (IZhO14_blocks)C++14
100 / 100
342 ms41356 KiB
#include <iostream>
#include <stack>
#include <vector>
#include <map>

using namespace std;

const int inf = 2e9;

int dp[100001][101];
int a[100001];

int32_t main() {
   ios::sync_with_stdio(0);
   cin.tie(0);
   int N, K;
   cin >> N >> K;
   
   for (int i = 1; i <= N; i++) {
      cin >> a[i];
   }
   
   for (int i = 0; i <= N; i++) {
      for (int j = 0; j <= K; j++) {
         dp[i][j] = inf;
      }
   }
   
   dp[0][0] = 0;
   dp[1][1] = a[1];
   for (int i = 2; i <= N; i++) {
      dp[i][1] = max(dp[i - 1][1], a[i]);
   }
   
   auto getmax = [&](int l, int r) -> int {
      int mx = a[l];
      for (int i = l; i <= r; i++) {
         mx = max(mx, a[i]);
      }
      return mx;
   };
   
   for (int k = 2; k <= K; k++) {
      stack < pair < int, int > > st;
      for (int i = 1; i <= N; i++) {
         int mn = dp[i - 1][k - 1];
         while (!st.empty() && a[st.top().first] <= a[i]) {
            mn = min(mn, st.top().second);
            st.pop();
         }
         if (!st.empty())
            dp[i][k] = min(dp[i][k], dp[st.top().first][k]);
         dp[i][k] = min(dp[i][k], mn + a[i]);
         st.push({i, mn});
      }
   }
   
   cout << dp[N][K] << '\n';
   
   return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

blocks.cpp: In function 'int32_t main()':
blocks.cpp:35:9: warning: variable 'getmax' set but not used [-Wunused-but-set-variable]
   35 |    auto getmax = [&](int l, int r) -> int {
      |         ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...