1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <utility>
#include <map>
using namespace std;

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    vector<int> aa(n), z(n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &aa[i]);
    }
    z[n-1] = m;
    for (int i = n-2; i >= 0; i--) {
        vector<pair<int, int>> g;
        for (int j = i+1; j < n; j++) {
            if (z[j] == -1) g.push_back(make_pair(0, -j));
            else g.push_back(make_pair(z[j] + aa[j], -j));
        }
        sort(g.begin(), g.end());
        int b = m;
        for (int j = 0; j < (n-i-1)/2; j++)
            b -= g[j].first;
        if (b < 0) {
            z[i] = -1;
        } else {
            z[i] = b;
            for (int j = i+1; j < n; j++)
                z[j] = 0;
            for (int j = 0; j < (n-i-1)/2; j++)
                z[-g[j].second] = g[j].first;
        }
    }
    for (int i = 0; i < n; i++) printf("%d ", z[i]);
    printf("\n");
	return 0;
}