【51NOD—貪心演算法專題】 A 低買高賣
阿新 • • 發佈:2019-02-09
低買高賣
基準時間限制:1 秒 空間限制:131072 KB 分值: 5
考慮股票市場,一共有n天。
對於第i天,B君知道股票的價格是每單位a[i]元
在每一天,B君可以選擇買入一個單位的股票,賣出一個單位的股票,或者什麼都不做(持有)。
剛開始B君有無窮多的錢,但是沒有任何股票。
問n天之後B君最多可以賺多少錢。
(1 <= n <= 200000)
(1 <= a[i] <= 10000)
Input
第一行一個整數n表示天數。 接下來一行n個整數,表示每天的價錢。
Output
一行一個整數表示最多可以賺的錢數。
Input示例
-
9
-
10 5 4 7 9 12 6 2 10
Output示例
20
程式碼:
//賣比買賺錢,假設每天都在賣(那麼每天都在賺錢) //不妨假設每到新的一天,都把當天的股票賣掉 //那因為現在一點股票都沒有,所有至少有一天要買入, //那就需要在今天或今天的前某天把其當天的賣出改成持有,或者持有改成買入 #include <iostream> #include <cstdio> #include <queue> using namespace std; typedef long long ll; int main(int argc, char** argv) { priority_queue<int>q;//大根堆 int n; scanf("%d",&n); int x; ll z=0; for(int i=0;i<n;i++){ scanf("%d",&x);//讀入賣出收益 q.push(-x); q.push(-x); ll tmp=x+q.top();//淨利潤=賣出收益-買入成本(最小成本) -10 -5 -4 -4 -5 -7 -6 -2 -2 //printf("%lld ",tmp); //每天的淨利潤 z+=tmp; q.pop(); } printf("\n%lld\n",z); return 0; }