zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Java 数据类型转换
    Perl 日期时间函数(date time)
    find a filename from a filehandle in Perl
    Perl文件读写
    R语言算术运算和逻辑运算
    bash/shell 数学计算
    grep/awk/sed 或者 并且 否定
    关于打印 毕业设计资料
    python 捕获 shell/bash 脚本的输出结果
    推荐几个高质量的图片素材网站
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10751060.html
Copyright © 2011-2022 走看看