1. 程式人生 > >至多隻能交易兩次的股票交易 最大值

至多隻能交易兩次的股票交易 最大值

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <string.h>
 4 using namespace std;
 5 
 6 const int Maxlen=1e5;
 7 const int INF = 0x3f3f3f;
 8 const int _INF = -0x3f3f3f;
 9 
10 int main(){
11     
12     //區域性最優解 和 全域性最優解
13     //定義local[i][j]為到達第i天是最多可進行j次交易且最後一次交易在最後一天的最大利潤 為區域性最優解
14 //定義global[i][j]為到達第i天最多可以進行j次交易的最大利潤為全域性最優解 15 //給定每天的股票價格 16 //遍歷,計算出第x天之前的一次交易可以得到的最大效益,儲存到former[n]中 17 //遍歷,計算出第x天之後的一次交易可以得到的最大效益,儲存在latter[n]中 18 //遍歷,計算former[i] +latter[i] 得到最大效益max 19 int prices[Maxlen];//儲存每天的股票價值 20 int i,j,k,n;//n代表的是給定的天數 21 while(~scanf("%d",&n)){ 22
for(i=0;i<n;i++) 23 scanf("%d",&prices[i]); 24 int former[Maxlen];//第n天前的一次交易的最大收益 25 int latter[Maxlen];//第n天后的一次交易的最大效益 26 int MinPrice=INF; 27 int MaxPrice=_INF; 28 int Maxans=0; 29 //分別通過遍歷求解former和latter陣列 30 for(i=0;i<n;i++){
31 MinPrice=min(MinPrice,prices[i]); 32 Maxans=max(Maxans,prices[i]-MinPrice); 33 former[i]=Maxans; 34 } 35 //其中Minprice代表的是n天之前的股票價格的最小值 36 //其中maxans代表的是n天之前當時的最大收益 37 Maxans=0; 38 for(i=n-1;i>=0;i--){ 39 MaxPrice=max(MaxPrice,prices[i]); 40 Maxans=max(Maxans,MaxPrice-prices[i]); 41 latter[i]=Maxans; 42 } 43 Maxans=0; 44 for(i=0;i<n;i++) 45 Maxans=max(Maxans,former[i]+latter[i]); 46 printf("%d\n",Maxans); 47 } 48 return 0; 49 }