#22. 量化交易 ——Yucai OJ第17次测试

问题描述

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

applpie 收集了“塞帕思股份(surpass)”在最近的连续 N 天内的价格。在每一 天中,他可以做如下事情之一:

  1. 睡(把)觉(妹)。
  2. 以当天的价格作为成交价买入 1 股“塞帕思”的股票。
  3. 以当天的价格作为成交价卖出 1 股“塞帕思”的股票。

最初 applepi 不持有该股票。现在你需要计算出在最优策略下, N 天后 applepi 能够获得的最大利润。为了维护森林的和平,本着清仓甩锅的原则,在 N 天的 交易结束后 applepi 也不能持有“塞帕思”的股票。

输入格式

每个测试点包含若干组数据,以 EOF 结尾。对于每组数据: 第一行 1 个整数 N。 第二行 N 个正整数,相邻两个整数之间用 1 个空格隔开,表示每一天股票 的价格。

输出格式

对于每组数据,首先按样例所示的格式“Case #k:”输出该组数据的编号, 然后输出一个整数,表示 applepi 最大能够获得的利润。

样例输入1

6 
2 6 7 3 5 6 
8 
1 2 3 4 5 6 7 8

样例输出1

Case #1: 8 
Case #2: 16

样例输入2

10 
15831 47573 60015 51368 32460 34125 43074 75172 54014 93578

样例输出2

Case #1: 161084

数据规模与约定

对于 50%的数据,1≤N≤1000。

对于 100%的数据,1≤N≤100000,股票价格不超过 100000,每个测试点至 多包含 5 组数据。 

题解

贪心

 1 #include<bits/stdc++.h> 
 2 using namespace std;
 3 int n;
 4 int gi(){
 5     int str=0;
 6     char ch=getchar();
 7     while(ch>'9' || ch<'0'){
 8         ch=getchar();
 9     }
10     while(ch>='0' && ch<='9'){
11         str=str*10+ch-'0';
12         ch=getchar();
13     }
14     return str;
15 }
16 int cnt=0;
17 int t[400000],num=0;
18 void putin(int x){
19     t[++num]=x;
20     int now=num,next;
21     while(now>1){
22         next=(now>>1);
23         if(t[now]>=t[next]){
24             break;
25         }
26         swap(t[now],t[next]);
27         now=next;
28     }
29     return ;
30 }
31 int getit(){
32     int str=t[1];
33     t[1]=t[num--];
34     int now=1,next;
35     while((now<<1)<=num){
36         next=now<<1;
37         if(t[next]>t[next+1] && next<num){
38             next++;
39         }
40         if(t[now]<=t[next]){
41             break;
42         }
43         swap(t[now],t[next]);
44         now=next;
45     }
46     return str;
47 }
48 void work(){
49     cnt++;
50     int x,tmp;
51     long long ans=0;
52     for(int i=1;i<=n;i++){
53         x=gi();
54         if(!num || t[1]>=x){
55             putin(x);
56         }else{
57             tmp=getit();
58             ans+=x-tmp;
59             putin(x);
60             putin(x);
61         }
62     }
63     cout<<"Case #"<<cnt<<": "<<ans<<endl;
64     return ;
65 }
66 int main(){
67     while(cin>>n){
68         work();
69         num=0;
70     }
71     return 0;
72 }
标程

猜你喜欢

转载自www.cnblogs.com/VOCAOID/p/9558597.html