zoukankan      html  css  js  c++  java
  • BZOJ2802Warehouse Store题解

    链接

    我太菜了,连贪心题都不会写。。。

    贪心思路很简单,我们能满足顾客就满足他,如果满足不了,就看之前的顾客中

    有没有需求比该顾客多的顾客,如果有的话改为卖给这位顾客会使解更优

    所以我们用一个优先队列维护一下所有卖的顾客,然后每此判断一下就好了

    # include<iostream>
    # include<cstdio>
    # include<algorithm>
    # include<cstring>
    # include<cmath>
    # include<queue>
    using namespace std;
    typedef long long LL;
    priority_queue<pair<int,int> > q;
    const int mn = 250005;
    int n;
    int a[mn],b[mn],st[mn],cnt;
    bool vis[mn];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            scanf("%d",&b[i]);
        LL now=0;
        for(int i=1;i<=n;i++)
        {
            now+=a[i];
            if(now-b[i]>=0)
            {
                q.push(make_pair(b[i],i));
                vis[i]=1;
                now-=b[i];
            }
            else if(!q.empty()){
                pair<int,int> tmp=q.top();
                if(tmp.first>b[i] && now+tmp.first-b[i]>=0)
                {
                    q.pop();
                    vis[tmp.second]=0;
                    now=now+tmp.first-b[i];
                    vis[i]=1;
                    q.push(make_pair(b[i],i));
                }
            }
        }
        for(int i=1;i<=n;i++)
            if(vis[i]) st[++cnt]=i;
        printf("%d
    ",cnt);
        for(int i=1;i<=cnt;i++)
            printf("%d ",st[i]);
        return 0;
    }

     

  • 相关阅读:
    MYSQL性能优化的最佳20+条经验
    MySQL性能分析工具之PROFILE
    理解事务的4种隔离级别
    二进制中1的个数
    滑动窗口最大值
    字符流中第一个不重复字符
    字符串转化为整数
    java字符,字符串,数字之间的转换
    java中数组输出的方式
    java基础知识(1)
  • 原文地址:https://www.cnblogs.com/logeadd/p/9600490.html
Copyright © 2011-2022 走看看