股票买卖(信息学奥赛一本通-T1302)
【題目描述】
最近越來(lái)越多的人都投身股市,阿福也有點(diǎn)心動(dòng)了。謹(jǐn)記著“股市有風(fēng)險(xiǎn),入市需謹(jǐn)慎”,阿福決定先來(lái)研究一下簡(jiǎn)化版的股票買賣問(wèn)題。
假設(shè)阿福已經(jīng)準(zhǔn)確預(yù)測(cè)出了某只股票在未來(lái)N天的價(jià)格,他希望買賣兩次,使得獲得的利潤(rùn)最高。為了計(jì)算簡(jiǎn)單起見(jiàn),利潤(rùn)的計(jì)算方式為賣出的價(jià)格減去買入的價(jià)格。
同一天可以進(jìn)行多次買賣。但是在第一次買入之后,必須要先賣出,然后才可以第二次買入。
現(xiàn)在,阿福想知道他最多可以獲得多少利潤(rùn)。
【輸入】
輸入的第一行是一個(gè)整數(shù)T(T≤50),表示一共有T組數(shù)據(jù)。
接下來(lái)的每組數(shù)據(jù),第一行是一個(gè)整數(shù)N(1≤N≤100,000),表示一共有N天。第二行是 N 個(gè)被空格分開(kāi)的整數(shù),表示每天該股票的價(jià)格。該股票每天的價(jià)格的絕對(duì)值均不會(huì)超過(guò)1,000,000。
【輸出】
對(duì)于每組數(shù)據(jù),輸出一行。該行包含一個(gè)整數(shù),表示阿福能夠獲得的最大的利潤(rù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<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 100001 #define MOD 100001 #define E 1e-12 using namespace std; int a[N],f1[N],f2[N]; int main() {int t,ans;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);int minn=INF,maxx=-INF;f1[0]=0;f2[n+1]=0;for(int i=1;i<=n;i++){minn=min(minn,a[i]);f1[i]=max(f1[i-1],a[i]-minn);}for(int i=n;i>=1;i--){maxx=max(maxx,a[i]);f2[i]=max(f2[n+1],maxx-a[i]);}int ans=-INF;for(int i=1;i<=n;i++)ans=max(ans,f1[i]+f2[i]);printf("%d\n",ans);}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的股票买卖(信息学奥赛一本通-T1302)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 连通块(信息学奥赛一本通-T1335)
- 下一篇: Cow Picnic(POJ-3256)