#include <algorithm>
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define FORD(i,a,b) for(int i=(b)-1;i>=(a);--i)
#define REP(i,n) FOR(i,0,n)
#define REPD(i,n) FORD(i,0,n)
#define PB push_back
#define ALL(c) (c).begin(),(c).end()
#define MP make_pair
#define FT first
#define SD second
#define INT(x) int x; scanf("%d", &x)
typedef pair<int,int> PII;
typedef vector<PII> VII;
int a[50000], r[50000];
int main() {
INT(n);
INT(m);
REP(i,n) scanf("%d", &a[i]);
REPD(i,n) {
VII v;
FOR(j,i+1,n) v.PB(MP(r[j] >= 0 ? r[j] + a[j] : 0, -j));
sort(ALL(v));
int w = n - i - 1;
int h = w >> 1;
int s = 0;
REP(j,h) s += v[j].FT;
if (s > m) {
r[i] = -1;
continue;
}
REP(j,h) r[-v[j].SD] = v[j].FT;
FOR(j,h,w) r[-v[j].SD] = 0;
r[i] = m - s;
}
REP(i,n) {
if (i) printf(" ");
printf("%d", r[i]);
}
printf("\n");
}
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 40 41 42 43 44 45 46 47 48 | #include <algorithm> #include <cstdio> #include <utility> #include <vector> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define FORD(i,a,b) for(int i=(b)-1;i>=(a);--i) #define REP(i,n) FOR(i,0,n) #define REPD(i,n) FORD(i,0,n) #define PB push_back #define ALL(c) (c).begin(),(c).end() #define MP make_pair #define FT first #define SD second #define INT(x) int x; scanf("%d", &x) typedef pair<int,int> PII; typedef vector<PII> VII; int a[50000], r[50000]; int main() { INT(n); INT(m); REP(i,n) scanf("%d", &a[i]); REPD(i,n) { VII v; FOR(j,i+1,n) v.PB(MP(r[j] >= 0 ? r[j] + a[j] : 0, -j)); sort(ALL(v)); int w = n - i - 1; int h = w >> 1; int s = 0; REP(j,h) s += v[j].FT; if (s > m) { r[i] = -1; continue; } REP(j,h) r[-v[j].SD] = v[j].FT; FOR(j,h,w) r[-v[j].SD] = 0; r[i] = m - s; } REP(i,n) { if (i) printf(" "); printf("%d", r[i]); } printf("\n"); } |
English