Codeforces Round #437 E. Buy Low Sell High
题意:买卖股票,给你n个数,你可以选择买进或者卖出或者什么都不做,问你最后获得的最大收益是多少。
9
10 5 4 7 9 12 6 2 10
20
20
3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4
41
In the first example, buy a share at 5, buy another at 4, sell one at 9 and another at 12.
Then buy at 2 and sell at 10. The total profit is - 5 - 4 + 9 + 12 - 2 + 10 = 20.
思路:对于一个数字,如果之后的的数字如果比这个数字还大,那么我们可以当作之前买了一个,然后现在卖出去,可是这样的做
法存在问题,比如1,2,3,66,按照那样的做法,我们的收益是2-1+66-3=64,然而66-1+3-2=66,很明显是错误的。
那么,如果我们把之前的数字a放入优先队列,在遇到b的时候拿出来,把现在的数字b放入有优先队列两次,而收益暂时放
入ans中,假如说,后面有一个数字c用到了现在处于优先队列的队头b,如果我们用了这个b,实际上我们是用c买了之前的
a,原因是这样的,从收益上看,收益是c-b+(b-a)=c-a,而从优先队列上看,队列里面都是只存在b,不存在a,这样的话,
我们就是始终保持当前ans最大,并且当后面的选择与前面选择冲突的时候,让之前的选择充当一个跳板,使得我们的ans
依旧是最优的。
引用:http://blog.csdn.net/Roll_Keyboard/article/details/78145042
(碰到一个大于堆顶的数,将他压入队列两次,一次是为了充当跳板,一次是本身的作用) 代码:
#include<iostream>
#include<queue>
using namespace std; priority_queue<int,vector<int>,greater<int> >q; int main(){
int n,x;
long long ans=0;
cin>>n;
cin>>x;
q.push(x);
for(int i=1;i<n;i++){
cin>>x;
int t=q.top();
if(x>t){
ans+=x-t;
q.pop();
q.push(x);
}
q.push(x);
}
cout<<ans<<endl;
return 0;
}
Codeforces Round #437 E. Buy Low Sell High的更多相关文章
- Codeforces Round #437 (Div. 2)[A、B、C、E]
Codeforces Round #437 (Div. 2) codeforces 867 A. Between the Offices(水) 题意:已知白天所在地(晚上可能坐飞机飞往异地),问是否从 ...
- 【CF865D】Buy Low Sell High(贪心)
[CF865D]Buy Low Sell High(贪心) 题面 洛谷 CF 题解 首先有一个\(O(n^2)\)的\(dp\)很显然,设\(f[i][j]\)表示前\(i\)天手中还有\(j\)股股 ...
- Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
Problem A Between the Offices 水题,水一水. #include<bits/stdc++.h> using namespace std; int n; ]; i ...
- CodeForces - 867E Buy Low Sell High (贪心 +小顶堆)
https://vjudge.net/problem/CodeForces-867E 题意 一个物品在n天内有n种价格,每天仅能进行买入或卖出或不作为一种操作,可以同时拥有多种物品,问交易后的最大利益 ...
- Buy Low Sell High CodeForces - 867E (思维,贪心)
大意: 第i天可以花$a_i$元买入或卖出一股或者什么也不干, 初始没钱, 求i天后最大收益 考虑贪心, 对于第$x$股, 如果$x$之前有比它便宜的, 就在之前的那一天买, 直接将$x$卖掉. 并不 ...
- 【CodeForces】866D. Buy Low Sell High
[题意]已知n天股价,每天可以买入一股或卖出一股或不作为,最后必须持0股,求最大收益. [算法]堆 贪心? [题解] 不作为思想:[不作为=买入再卖出] 根据不作为思想,可以推出中转站思想. 中转站思 ...
- [ CodeForces 865 D ] Buy Low Sell High
\(\\\) \(Description\) 给出\(N\)天股票的价钱\(A_1,...,A_N\),每天可以什么都不做,或者买入或卖出\(1\)支股票,分别花出或收入\(A_i\)元,求最大收益 ...
- CF867E: Buy Low Sell High(贪心, STL) (hdu6438)
Description 有nn个城市,第ii个城市商品价格为aiai,从11城市出发依次经过这nn个城市到达n n城市,在每个城市可以把手头商品出售也可以至多买一个商品,问最大收益. Input 第 ...
- Codeforces Round #437 Div. 1
A:显然构造一组只包含1和2面值的数据即可. #include<iostream> #include<cstdio> #include<cmath> #includ ...
随机推荐
- Angular新手容易碰到的坑
在Angular群里回答新手问题一段时间了,有一些Angular方面的坑留在这里备查,希望能对各位有所帮助.这个文章将来会随时更新,不会单独开新章,欢迎各位订阅. Q1.<div ng-incl ...
- [转]Golang TLS
首先是自签证书: openssl与数字证书的使用 https://blog.csdn.net/yue7603835/article/details/72569012 Golang TLS服务端/客户端 ...
- C#缓存流的使用浅析
C#缓存流的使用实例:用缓存流复制文件,C#文件处理操作必须先导入命名空间: using System.IO; ///在按钮的Click事件中添加如下代码: private void button1_ ...
- 使用miniconda创建python虚拟环境
安装python指定环境 conda create -n oldboy python=3.6.5 安装环境的同时安装相应的包 conda create -n oldboy python=3.6.5 p ...
- Go Example--格式化字符串
package main import ( "fmt" "os" ) type point struct { x, y int } func main() { ...
- laravel whereNotIn where子查詢
子查詢寫法 $stores = Stores::select('id','name')->whereNotIn('id', function ($query) use($id){ $query- ...
- py-day3-5 python 函数式编程
# 函数式(方程式 y = 2*x+1) def calc(x): return 2*x+1 print('得出的结果:',calc(6)) 得出的结果: 13 # 面向过程 def calc(x): ...
- <Numerical Analysis>(by Timothy Sauer) Notes
2ed, by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...
- set-----》集合
1.set 是无序 不重复的序列 2.创建 list = [] dic = {"k1":123} set = {"123","333"} ...
- kafuka资料学习
http://blog.csdn.net/hmsiwtv/article/details/46960053