Untitled

 avatar
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