Submission #971169

#TimeUsernameProblemLanguageResultExecution timeMemory
971169kilkuwu수열 (APIO14_sequence)C++17
50 / 100
2058 ms8728 KiB
#include <bits/stdc++.h>

#define nl '\n'

const int mxN = 1e4 + 5, mxK = 205;
int A[mxN];
int64_t pref[mxN];
int way[mxN][mxK];
int N, K;

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  
  std::cin >> N >> K;
  for (int i = 1; i <= N; i++) {
    std::cin >> A[i];
    pref[i] = pref[i - 1] + A[i];
  }

  std::vector<int64_t> dp(N + 1, -1e18);
  std::vector<int64_t> ndp(N + 1, -1e18);
  dp[0] = 0;

  for (int j = 1; j <= K + 1; j++) {
    ndp[0] = -1e18;
    for (int i = 1; i <= N; i++) {
      ndp[i] = -1e18;
      for (int k = i - 1; k >= 0; k--) {
        auto cand = dp[k] + (pref[i] - pref[k]) * pref[k];
        if (ndp[i] < cand) {
          ndp[i] = cand;
          way[i][j] = k;
        }
      }  
    }

    std::swap(dp, ndp);
  }

  std::cout << dp[N] << nl;
  std::vector<int> ans;

  int x = N;
  int y = K + 1;
  while (x > 0 && y > 1) {
    ans.push_back(way[x][y]);
    x = way[x][y];
    y--;
  }

  for (int i : ans) std::cout << i << " ";
  std::cout << nl;

}


/*
7 3
4 1 3 4 0 2 3
*/
#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...