Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- using namespace std;
- #define SZ(a) (int)(a).size()
- using ll = long long;
- int main() {
- cin.sync_with_stdio(false);
- int n;
- int m;
- cin >> n >> m;
- vector<int> foods;
- for (int i = 0; i < n; i++) {
- int x;
- cin >> x;
- foods.push_back(x);
- }
- vector<int> ms;
- for (int m1 = m; m1 > 0; m1 = m1 * 2 / 3) {
- ms.push_back(m1);
- }
- int k = SZ(ms);
- vector<int> zeros(k, 0);
- vector<int> ones(k, 0);
- int two = 0;
- for (int i = 0; i < n; i++) {
- auto zeros_ = zeros;
- zeros[0] = max(two, ones[0]) + min(foods[i], m);
- for (int j = 1; j < k; j++) {
- zeros[j] = max(zeros_[j - 1], ones[j]) + min(foods[i], ms[j]);
- }
- for (int j = 0; j < k; j++) {
- two = max(two, ones[j]);
- }
- ones = zeros_;
- // printf("Iteration %d\n", i);
- // for (int j = 0; j < k; j++) {
- // printf("%d%c", zeros[j], " \n"[j == k - 1]);
- // }
- // for (int j = 0; j < k; j++) {
- // printf("%d%c", ones[j], " \n"[j == k - 1]);
- // }
- // printf("%d\n", two);
- // puts("");
- }
- int ans = two;
- for (int j = 0; j < k; j++) {
- ans = max(ans, zeros[j]);
- ans = max(ans, ones[j]);
- }
- printf("%d\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement