赞
踩
最近越来越多的人都投身股市,阿福也有点心动了。谨记着“股市有风险,入市需谨慎”,阿福决定先来研究一下简化版的股票买卖问题。
假设阿福已经准确预测出了某只股票在未来 N 天的价格,他希望买卖两次,使得获得的利润最高。为了计算简单起见,利润的计算方式为卖出的价格减去买入的价格。
同一天可以进行多次买卖。但是在第一次买入之后,必须要先卖出,然后才可以第二次买入。
现在,阿福想知道他最多可以获得多少利润。
3
7
5 14 -2 4 9 3 17
6
6 8 7 4 1 -2
4
18 9 5 2
28
2
0
- #include <iostream>
- #include <cstdio>
- #include <queue>
- #include <vector>
- #include <map>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- const int minnn = 1000001;
- const int maxnn = -1000001;
- int main()
- {
- int t, day, i, j;
- scanf("%d",&t);
- while( t-- )
- {
- int date[100010];
- int predp[100010] = {0};
- int postdp[100010] = {0};
- scanf("%d",&day);
- for( i=1; i<=day; i++ )
- scanf("%d",&date[i]);
- int minn = minnn, maxn = maxnn;
- for( i=1; i<=day; i++ )
- {
- if( date[i] < minn ) //找到最小值;
- minn = date[i];
- predp[i] = max(date[i] - minn, predp[i-1]); //该天前最大收益;
- if( date[day-i+1] > maxn ) //找到最大值;
- maxn = date[day-i+1];
- postdp[day-i+1] = max(maxn - date[day-i+1], postdp[day-i+2]); //该天后最大收益;
- }
-
- int max_profit = 0;
- for( i=1; i<=day; i++ )
- {
- max_profit = max(predp[i] + postdp[i], max_profit); //找出两次最大收益;
- }
- printf("%d\n",max_profit);
- }
- return 0;
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。