Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // AC http://contest.uni-smr.ac.ru/ru/problemset/6131/
- #include <iostream>
- #include <vector>
- #include <algorithm>
- int main() {
- size_t n;
- std::cin >> n;
- std::vector<size_t> f(n);
- for (size_t i = 0; i < n; i++) {
- std::cin >> f[i];
- }
- std::vector<size_t> type(n + 1);
- std::vector<size_t> dp(n + 1);
- dp[0] = 0;
- dp[1] = f[0] * 2;
- type[0] = -1;
- type[1] = 1;
- for (size_t i = 2; i < n + 1; i++) {
- if (std::max(dp[i - 2], 2 * (((f[i - 1] + 1) / 2) + (f[i - 2] + 1) / 2)) < std::max(dp[i - 1], f[i - 1] * 2)) {
- dp[i] = std::max(dp[i - 2], 2 * (((f[i - 1] + 1) / 2) + (f[i - 2] + 1) / 2));
- type[i] = 2;
- } else {
- dp[i] = std::max(dp[i - 1], f[i - 1] * 2);
- type[i] = 1;
- }
- }
- std::cout << dp[n] << '\n';
- size_t i = n;
- std::vector<size_t> res;
- while (i != 0) {
- res.push_back(type[i]);
- if (type[i] == 2) {
- res.push_back(type[i]);
- }
- i -= type[i];
- }
- std::for_each(res.rbegin(), res.rend(), [](size_t elem) { std::cout << elem << ' '; });
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement