• 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;
    }

     

  • 相关阅读:
    四则运算题目的程序
    Github注册账户过程
    目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?
    学习进度总结
    学习进度总结
    7月29 日实习日志及总结
    7月28日实习日志
    7月27实习日志
    7月26日实习日志
    7月25日实习日志
  • 原文地址:https://www.cnblogs.com/logeadd/p/9600490.html
Copyright © 2020-2023  润新知