题目描述

数据范围

解法

贪心;

从左往右枚举,设枚举到元素为x,并维护一个堆:

设此时堆顶元素为y,

如果x大于y,那么x可以与y产生差价,立即将差价贡献给答案。

如果y之前已经和其他元素z产生过差价了,那么y显然可以省出来以得到最优答案,因为x-z=x-y+y-z;

否则,把y移出堆。

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #define ll long long
  7. #define sqr(x) ((x)*(x))
  8. #define ln(x,y) ll(log(x)/log(y))
  9. using namespace std;
  10. const char* fin="trade.in";
  11. const char* fout="trade.out";
  12. const ll inf=0x7fffffff;
  13. const ll maxn=100008;
  14. ll n,i,j,k,v=0,ans,t;
  15. ll a[maxn],son[maxn];
  16. struct dui{
  17. ll data[maxn],num;
  18. void init(){
  19. memset(data,0,sizeof(data));
  20. num=0;
  21. }
  22. dui(){
  23. init();
  24. }
  25. bool cmp(ll v,ll u){
  26. return a[v]<=a[u];
  27. }
  28. void up(ll x){
  29. while (x>1 && cmp(data[x],data[x/2])) swap(data[x],data[x/2]),x=x/2;
  30. }
  31. void down(ll x){
  32. while (x*2<=num && cmp(data[x*2],data[x]) || x*2+1<=num && cmp(data[x*2+1],data[x])){
  33. if (x*2+1>num || cmp(data[x*2],data[x*2+1])){
  34. swap(data[x],data[x*2]);
  35. x=x*2;
  36. }else{
  37. swap(data[x],data[x*2+1]);
  38. x=x*2+1;
  39. }
  40. }
  41. }
  42. void push(ll v){
  43. data[++num]=v;
  44. up(num);
  45. }
  46. void pull(){
  47. swap(data[1],data[num--]);
  48. down(1);
  49. }
  50. ll top(){
  51. if (num) return data[1];
  52. else return 0;
  53. }
  54. }d;
  55. ll read(){
  56. ll x=0,y=0;
  57. char ch=getchar();
  58. while (ch<'0' || ch>'9') {
  59. ch=getchar();
  60. y++;
  61. if (y==10) return -1;
  62. }
  63. while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
  64. return x;
  65. }
  66. int main(){
  67. freopen(fin,"r",stdin);
  68. freopen(fout,"w",stdout);
  69. while (1){
  70. n=read();
  71. if (n==-1) break;
  72. ans=0;
  73. t++;
  74. d.init();
  75. for (i=1;i<=n;i++) a[i]=read();
  76. memset(son,0,sizeof(son));
  77. for (i=1;i<=n;i++){
  78. if (d.top()){
  79. j=d.top();
  80. if (a[i]>a[j]){
  81. ans+=a[i]-a[j];
  82. if (son[j]){
  83. son[j]=0;
  84. son[i]=j;
  85. }else {
  86. d.pull();
  87. son[i]=j;
  88. }
  89. }
  90. }
  91. d.push(i);
  92. }
  93. printf("Case #%lld: %lld\n",t,ans);
  94. }
  95. return 0;
  96. }

启发

有关策略的问题可以考虑贪心;

贪心正着推,可以使用数据结构帮助贪心找到更优的解。

【JZOJ4835】【GDOI2017模拟10.31】量化交易的更多相关文章

  1. 【NOIP2012模拟10.31】掷骰子

    题目 太郎和一只免子正在玩一个掷骰子游戏.有一个有N个格子的长条棋盘,太郎和兔子轮流掷一个有M面的骰子,骰子M面分别是1到M的数字.且掷到任意一面的概率是相同的.掷到几.就往前走几步.当谁走到第N格时 ...

  2. 金融量化分析【day112】:初识量化交易

    一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...

  3. Python进阶量化交易场外篇4——寻找最优化策略参数

    新年伊始,很荣幸笔者的<教你用 Python 进阶量化交易>专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习 ...

  4. 零起点Python大数据与量化交易

    零起点Python大数据与量化交易 第1章 从故事开始学量化 1 1.1 亿万富翁的“神奇公式” 2 1.1.1 案例1-1:亿万富翁的“神奇公式” 2 1.1.2 案例分析:Python图表 5 1 ...

  5. Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)

    题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...

  6. 深度神经网络在量化交易里的应用 之二 -- 用深度网络(LSTM)预测5日收盘价格

        距离上一篇文章,正好两个星期. 这边文章9月15日 16:30 开始写. 可能几个小时后就写完了.用一句粗俗的话说, "当你怀孕的时候,别人都知道你怀孕了, 但不知道你被日了多少回 ...

  7. 【LSGDOJ1836】: 量化交易 贪心

    题目描述 applepi 训练了一个可以自动在股票市场进行量化交易的模型.通常来说,applepi 写出的模型,你懂得,就好比一架印钞机.不过为了谨慎起见,applepi还是想先检查一下模型的效果.a ...

  8. 17.10.31&11.01

    10.31模拟考试 Prob.1(AC)裸的矩阵幂 Prob.2(WA)(类似括号匹配求合法方案数) 卡特兰数的一个模型运用.可以推出一个式子(推导方法一个erge讲的,一个骚猪讲的) Prob.3( ...

  9. python做量化交易干货分享

    http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...

随机推荐

  1. HDFS常用Java API

  2. react-native start停止在Loading dependency graph, done.

    在试验的过程中. 发现运行 react-native start会卡住,停留在Loading dependency graph, done. 原因大概是之前运行过 react-native run-a ...

  3. JQuery学习:事件绑定&入口函数&样式控制

    1.基础语法学习: 1.事件绑定 2.入口函数 3.样式控制 <!DOCTYPE html> <html lang="en"> <head> & ...

  4. mysql 登录的时候设置编码 utf8

    很多时候 导入sql 的时候需要命令行导入 但是有的时候容易出现乱码 因为字符集的问题 所以 尽量在登录的时候就设置编码 就不容易出错了 例如: mysql -uroot -p –default-ch ...

  5. Redis源码解析:29事务

    Redis通过MULTl,EXEC,WATCH,DISCARD等命令来实现事务(transaction)功能. 事务从MULTI命令开始,之后,该客户端发来的其他命令会被排队,客户端发来EXEC命令之 ...

  6. DevCloud会员权益升级!日常领码豆,轻松换好礼!

    为了回馈每一位用户的使用和支持, 华为云DevCloud上线了会员中心, 大家在会员中心可以通过完成任务赚取码豆, 并在兑换商城兑换精美礼品. 如何通过任务获得码豆? 我们为大家准备了各种日常任务, ...

  7. TZ_12_Spring的RestTemplate

    1.Http客户端工具 HttpClient:HttpClient是Apache公司的产品,是Http Components下的一个组件. 特点: 基于标准.纯净的Java语言.实现了Http1.0和 ...

  8. git学习记录——基础概念和文件的基本操作

    夸一下git git是当前世界上最先进的分布式版本控制系统 优势: 1.不必联网 2.Git极其强大的分支管理,把SVN等远远抛在了后面. 集中式的代表CVS和SVN 分布式的代表BitKeeper, ...

  9. java并发系列(三)-----ReentrantLock(重入锁)功能详解和应用演示

    1. ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock.虽然在性能上ReentrantLock和synchronize ...

  10. Java方法传参的问题

    1.基本数据类型(byte,short,int,long,float,double,boolean,char)的值传递,不改变其值 2.引用数据类型的值传递,改变其值 3.String类型虽然是引用数 ...