题意 给出n个试剂 要求从左到右喝试剂,要求每时每刻的生命值都是正的,求喝的最大数量
Input
6
4 -4 1 -3 1 -3
Output
5
用一个优先队列存储走过能量为负的试剂,当生命值为负数的时候,就将负能量最大的试剂弹出,最后剩下的加上正能量的试剂数即答案
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3000;
int a[N];
priority_queue<int>q;
int main()
{
int t,i,j,k=0,l,cas = 1,n,ans=0;
ll sum=0,x=0,u;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lld",&x);
sum+=x;
if(x>=0) ans++;
else q.push(-x);
while(q.size()&&sum<0)
{
u=q.top();
sum+=u;
q.pop();
}
}
printf("%d\n",ans+q.size());
return 0;
}