链接:
https://codeforces.com/problemset/problem/1526/C1 https://codeforces.com/problemset/problem/1526/C2
题意:
按顺序从左往右嗑药,保证hp>=0,尽可能嗑最多的药;
题解:
加HP的药一定要喝,扣HP的先喝,但要用个东西(优先队列)存起来,等把HP喝成复数时,把扣的最狠的那瓶药吐出来;
题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin >> n;
ll ans = 0;
ll sum = 0;
priority_queue<ll,vector<ll>,less<ll>>s;
while (n--)
{
ll x;
cin >> x;
sum += x;
ans++;
if (x < 0);
{
s.push(-x);
}
if (sum < 0)
{
ans--;
sum += s.top();
s.pop();
}
}
cout << ans << endl;
}