[CF]1526C2 Potions (Hard Version) 优先队列、贪心

题目链接
题意:1~n中 从左到右选点 使得它们的和大于等于0 输出最多能选多少个点。
思路:
1.只要喝不死就往死里喝。
2.如果第i瓶会喝死 跟之前喝过的药剂比 如果比 毒性最大的药 毒性小 那就更新一下最小值。这样结果不会更糟。

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
 typedef long long LL;
int main()
{
   int n;scanf("%d",&n);
   priority_queue <LL,vector<LL>,greater<LL>>q;
   LL sum=0;int num=0;
   for(int i=1;i<=n;i++)
   {
       LL x;scanf("%lld",&x);
       if(sum+x>=0)
       {
           sum+=x;
           num++;
           q.push(x);
       }
       else if(q.size()&&q.top()<x)
       {
           sum+=x-q.top();
           q.pop();
           q.push(x);        
       }
   }
   printf("%d\n",num);
   return 0;
}
上一篇:[日常] git版本回退


下一篇:HDU-1097 A hard puzzle