1. 程式人生 > >2017級演算法第三次上機-F. SkyLee炒股票

2017級演算法第三次上機-F. SkyLee炒股票

  這道題其實是股票系列的一道很經典的題目,即只可以買賣一次所帶來的最大收益。

題目給定的是每天相對於前一天的的收益,所以這道題可以簡化為連續n個數的最大值問題。

這道題的演算法有一點貪心的思想。就是設定curnum和maxnum從開始到末尾掃描,curnum不斷加加,同時利用curnum不斷更新maxnum。同時如果curnum小於零,那麼就拋棄掉前面的數,curnum重新置為0。繼續往後掃描。

同時助教可能是設定了一個小的trick 即收益的值是恆大於零的,如果最大值是負數,那其實可以不參與任何交易。

#include <algorithm>
#include 
<iostream> using namespace std; int main() { long long n,i,j,k,num; long long curnum,maxnum; while(~scanf("%lld",&n)){ curnum=maxnum=0; for(i=1;i<=n;i++){ scanf("%lld",&num); curnum+=num; if(curnum>maxnum) maxnum
=curnum; else if(curnum<0) curnum=0; } if(maxnum > 0) printf("%lld\n",maxnum); else printf("0\n"); } return 0; }