Untitled
unknown
plain_text
a year ago
1.3 kB
7
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