码迷,mamicode.com
首页 > 其他好文 > 详细

【CodeForces】866D. Buy Low Sell High

时间:2017-10-01 13:12:55      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:股价   col   贪心思想   表示   最大   div   log   i++   long   

【题意】已知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

 

【CodeForces】866D. Buy Low Sell High

标签:股价   col   贪心思想   表示   最大   div   log   i++   long   

原文地址:http://www.cnblogs.com/onioncyc/p/7616959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!