• CF867E: Buy Low Sell High(贪心, STL) (hdu6438)


    Description

    nn个城市,第ii个城市商品价格为aiai,从11城市出发依次经过这nn个城市到达n

    n城市,在每个城市可以把手头商品出售也可以至多买一个商品,问最大收益。

    Input

    第一行一整数T

    T表示用例组数,每组用例首先输入一整数nn表示城市数量,之后输出nn个整数ai

    ai表示每个城市商品单价

    (1T250,1n105,n5105)

    Output

    输出最大收益

    sol:显然是贪心题;不难证明下面的东西是对的。

    如果某天的价格不能卖,那么插入队列一次,表示这个价格买。

    否则,插入队列两次。其中一次表示它替换掉的买价;另外一次是本身价格买。

    (这样的话,我们可以保证当前收益最大,而且由于我们把卖掉的也插入了队列,那么它后面可能会转化为买,所以不影响后面的操作。

    (即做到了当前收益最大,而且解决了后效性

    #include<bits/stdc++.h>
    #define ll long long
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int maxn=2000010;
    multiset<int>s;
    int a[maxn]; ll ans=0;
    int main()
    {
        int N,T; T=1;
        scanf("%d",&N);
        rep(i,1,N) scanf("%d",&a[i]);
        rep(i,1,N){
            if(!s.empty()&&*s.begin()<a[i]){
                ans+=a[i]-*s.begin();
                s.insert(a[i]);
                s.erase(s.begin());
            }
            s.insert(a[i]);
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    挖矿程序linux 删除
    本地复制vue项目
    新建vue项目
    CentOS7单用户模式
    CentOS6
    CentOS6-系统管理操作
    CentOS7-系统管理操作
    VMWare克隆虚拟机
    虚拟机网络模式设置为NAT
    VI/VIM编辑器
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10751060.html
Copyright © 2020-2023  润新知