1. 程式人生 > >【51NOD—貪心演算法專題】 A 低買高賣

【51NOD—貪心演算法專題】 A 低買高賣

低買高賣

基準時間限制: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示例

  1. 9

  2. 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;
}