Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ll n, X, Y;
- const ll MAXN = 1005;
- ll H[MAXN], pre[MAXN];
- ll dp[MAXN][MAXN];
- ll cal(ll i, ll sum1)
- {
- if (i == n)
- {
- return 0;
- }
- if (dp[i][sum1] != -1)
- {
- return dp[i][sum1];
- }
- if (sum1 + H[i] <= X)
- {
- dp[i][sum1] = max(dp[i][sum1], 1 + cal(i + 1, sum1 + H[i]));
- }
- if ((pre[i] - sum1) <= Y)
- {
- dp[i][sum1] = max(dp[i][sum1], 1 + cal(i + 1, sum1));
- }
- if (dp[i][sum1] == -1)
- {
- dp[i][sum1] = 0;
- }
- return dp[i][sum1];
- }
- void solve()
- {
- cin >> n >> X >> Y;
- for (ll i = 0; i < n; i++)
- {
- cin >> H[i];
- }
- sort(H, H + n);
- for (ll i = 0; i < n; i++)
- {
- pre[i] = H[i];
- if (i > 0)
- pre[i] += pre[i - 1];
- }
- memset(dp, -1, sizeof(dp));
- cout << cal(0, 0) << endl;
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement