• 【CodeForces】866D. Buy Low Sell High


    【题意】已知n天股价,每天可以买入一股或卖出一股或不作为,最后必须持0股,求最大收益。

    【算法】堆 贪心?

    【题解】

    不作为思想:【不作为=买入再卖出】

    根据不作为思想,可以推出中转站思想。

    中转站思想:【买卖可以借助中转站,差值累加】

    做法:从左到右,每次将两个-v加入堆,然后取大堆顶出来组成买卖。

    理解:每个数字都和前面一个数字配对,然后在堆中留下两个数字,第一次访问表示转为中转站,第二次访问表示买该数字。

    特别地,当前面没有比它小的数字时,会和自己组成买卖,就直接省去中转站功能。

    ★其实这种思想相当于贪心思想中在堆里加入反悔元素的行为,先这个数字得到眼前利益,后面不行再转成不作为的中转站,不行再这个数字。

    因为操作有三种,所以就需要在堆中加入两个-v来反悔。嗯,这样解释就通俗多了QAQ

    #include<cstdio>
    #include<queue>
    using namespace std;
    priority_queue<int>q;
    int n;long long ans;
    int main(){
        scanf("%d",&n);int u;
        for(int i=1;i<=n;i++){
            scanf("%d",&u);
            q.push(-u);q.push(-u);
            ans+=u+q.top();
            q.pop();
        }
        printf("%I64d",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    【解决火车轮播图小圆点跳的问题】传统轮播图-三位法
    jq龙禧轮播图
    QT MSVC环境中添加QWT
    XDMA ip core的使用
    PCIe基础知识与例程分析----PIO_demo
    Day04 (四)_TCP文件传输设计
    Day04 (三)_UDP传输端设计
    Day04 (二)_TCP传输客户器端设计
    Day04 (一)_TCP传输服务器端设计
    Day03 (下)_Qt文件系统
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7616959.html
Copyright © 2020-2023  润新知