1302:股票买卖
和 合唱队形 有异曲同工之妙!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int N=1e5+5; 7 int price[N]; 8 int minn[N],maxx[N]; 9 int li[N],ri[N]; 10 11 int main(){ 12 int t; 13 cin>>t; 14 while(t--){ 15 int n; 16 cin>>n; 17 for(int i=1;i<=n;i++)scanf("%d",price+i); 18 minn[1]=price[1],li[1]=0; 19 for(int i=2;i<=n;i++){ 20 minn[i]=min(minn[i-1],price[i]);//minn[i]表示前i天的最低价格 21 li[i]=max(li[i-1],price[i]-minn[i]);//li[i]表示前i天卖出能获得的最大利润 22 } 23 maxx[n]=price[n],ri[n]=0; 24 for(int i=n-1;i>0;i--){ 25 maxx[i]=max(maxx[i+1],price[i]);//maxx[i]表示第i天到第n天的最高价格 26 ri[i]=max(ri[i+1],maxx[i]-price[i]);//ri[i]表示第i天到第n天买入能获得的最大利润 27 } 28 int ans=0; 29 for(int i=1;i<=n;i++){ 30 ans=max(ans,li[i]+ri[i]); 31 } 32 printf("%d\n",ans); 33 } 34 return 0; 35 }