제출 #971169

#제출 시각아이디문제언어결과실행 시간메모리
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...