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;
    }
  • 相关阅读:
    Codeforces Round #276 (Div. 1) D. Kindergarten dp
    Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
    hihoCoder Challenge 27 #1469 : 福字 dp
    Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈
    Python id() 函数
    Python divmod() 函数
    Python any() 函数
    Python next() 函数
    Python slice() 函数
    Python3 hex() 函数
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10751060.html
Copyright © 2011-2022 走看看