Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. #define SZ(a) (int)(a).size()
  8. using ll = long long;
  9.  
  10. int main() {
  11.     cin.sync_with_stdio(false);
  12.     int n;
  13.     int m;
  14.     cin >> n >> m;
  15.     vector<int> foods;
  16.     for (int i = 0; i < n; i++) {
  17.         int x;
  18.         cin >> x;
  19.         foods.push_back(x);
  20.     }
  21.     vector<int> ms;
  22.     for (int m1 = m; m1 > 0; m1 = m1 * 2 / 3) {
  23.         ms.push_back(m1);
  24.     }
  25.     int k = SZ(ms);
  26.     vector<int> zeros(k, 0);
  27.     vector<int> ones(k, 0);
  28.     int two = 0;
  29.     for (int i = 0; i < n; i++) {
  30.         auto zeros_ = zeros;
  31.         zeros[0] = max(two, ones[0]) + min(foods[i], m);
  32.         for (int j = 1; j < k; j++) {
  33.             zeros[j] = max(zeros_[j - 1], ones[j]) + min(foods[i], ms[j]);
  34.         }
  35.         for (int j = 0; j < k; j++) {
  36.             two = max(two, ones[j]);
  37.         }
  38.         ones = zeros_;
  39.         // printf("Iteration %d\n", i);
  40.         // for (int j = 0; j < k; j++) {
  41.         //     printf("%d%c", zeros[j], " \n"[j == k - 1]);
  42.         // }
  43.         // for (int j = 0; j < k; j++) {
  44.         //     printf("%d%c", ones[j], " \n"[j == k - 1]);
  45.         // }
  46.         // printf("%d\n", two);
  47.         // puts("");
  48.     }
  49.     int ans = two;
  50.     for (int j = 0; j < k; j++) {
  51.         ans = max(ans, zeros[j]);
  52.         ans = max(ans, ones[j]);
  53.     }
  54.     printf("%d\n", ans);
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement