Untitled
unknown
plain_text
a year ago
1.3 kB
12
Indexable
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 5005;
int n, k;
int a[MAX_N];
int p[MAX_N], dp[MAX_N], suff[MAX_N];
bool ans[MAX_N];
int maxs;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
freopen("soldier.inp", "r", stdin);
freopen("soldier.out", "w", stdout);
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
p[i] = i;
}
sort(p + 1, p + n + 1, [&](int x, int y) {
return a[x] > a[y];
});
for (int i = n; i >= 1; --i) {
if (a[p[i]] >= k) {
suff[i] = suff[i + 1];
} else {
suff[i] = suff[i + 1] + a[p[i]];
}
}
dp[0] = 1;
maxs = 0;
for (int i = 1; i <= n; ++i) {
if (a[p[i]] >= k) {
ans[p[i]] = 1;
} else {
if (maxs + suff[i + 1] >= k - a[p[i]]) {
ans[p[i]] = 1;
}
for (int j = k; j >= 0; --j) {
if (dp[j]) {
if (j + a[p[i]] < k) {
maxs = max(maxs, j + a[p[i]]);
dp[j + a[p[i]]] = 1;
}
}
}
}
}
for (int i = 1; i <= n; ++i) {
cout << ans[i];
}
return 0;
}
Editor is loading...
Leave a Comment