Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Слава Україні, Героям слава
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 6e3 + 7;
- long long linf = 0x3f3f3f3f3f3f3f3f;
- long long dp[N][N], v[N], n, b, c, ps[N], ps2[N];
- short opt[N][N];
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cin >> n >> b >> c;
- for(int i = 1; i <= n; i++) {
- cin >> v[i];
- ps[i] = ps[i - 1] + v[i];
- ps2[i] = ps2[i - 1] + v[i] * i * c;
- dp[i][1] += b;
- for(int j = 1; j <= i; j++) {
- dp[i][1] += v[j] * (i - j) * c;
- }
- opt[i][1] = 1;
- opt[n + 1][i] = n;
- }
- for(int j = 2; j <= n; j++) {
- for(int i = n; i >= 1; i--) {
- dp[i][j] = linf;
- for(int k = opt[i][j - 1]; k <= opt[i + 1][j]; k++) {
- int mid = (k + i) >> 1;
- 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;
- if(v < dp[i][j]) {
- opt[i][j] = k;
- dp[i][j] = v;
- }
- }
- }
- }
- for(int k = 1; k <= n; k++) {
- long long ans = linf;
- for(int i = k; i <= n; i++) {
- ans = min(ans, dp[i][k] + ps2[n] - ps2[i] - (ps[n] - ps[i]) * i);
- }
- cout << ans << " \n"[k == n];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement