Advertisement
cosenza987

bullshti

Mar 28th, 2023
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. //Слава Україні, Героям слава
  2.  
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. const int N = 6e3 + 7;
  8. long long linf = 0x3f3f3f3f3f3f3f3f;
  9.  
  10. long long dp[N][N], v[N], n, b, c, ps[N], ps2[N];
  11. short opt[N][N];
  12.  
  13. int main() {
  14.     ios_base::sync_with_stdio(false);
  15.     cin.tie(nullptr);
  16.     cin >> n >> b >> c;
  17.     for(int i = 1; i <= n; i++) {
  18.         cin >> v[i];
  19.         ps[i] = ps[i - 1] + v[i];
  20.         ps2[i] = ps2[i - 1] + v[i] * i * c;
  21.         dp[i][1] += b;
  22.         for(int j = 1; j <= i; j++) {
  23.             dp[i][1] += v[j] * (i - j) * c;
  24.         }
  25.         opt[i][1] = 1;
  26.         opt[n + 1][i] = n;
  27.     }
  28.     for(int j = 2; j <= n; j++) {
  29.         for(int i = n; i >= 1; i--) {
  30.             dp[i][j] = linf;
  31.             for(int k = opt[i][j - 1]; k <= opt[i + 1][j]; k++) {
  32.                 int mid = (k + i) >> 1;
  33.                 long long v = dp[k][j - 1] + ps2[mid] - ps2[k] - (ps[mid] - ps[k]) * k + (ps[i] - ps[mid]) * i - (ps2[i] - ps2[mid]) + b;
  34.                 if(v < dp[i][j]) {
  35.                     opt[i][j] = k;
  36.                     dp[i][j] = v;
  37.                 }
  38.             }
  39.         }
  40.     }
  41.     for(int k = 1; k <= n; k++) {
  42.         long long ans = linf;
  43.         for(int i = k; i <= n; i++) {
  44.             ans = min(ans, dp[i][k] + ps2[n] - ps2[i] - (ps[n] - ps[i]) * i);
  45.         }
  46.         cout << ans << " \n"[k == n];
  47.     }
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement