【51NOD—贪心算法专题】 A 低买高卖

https://www.51nod.com/contest/Problem.html#!problemId=2206&contestId=54

低买高卖

基准时间限制: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

AC代码

//卖比买赚钱,假设每天都在卖(那么每天都在赚钱)
//不妨假设每到新的一天,都把当天的股票卖掉
//那因为现在一点股票都没有,所有至少有一天要买入,
//那就需要在今天或今天的前某天把其当天的卖出改成持有,或者持有改成买入 
#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;
}

 

 

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/qian2213762498/article/details/81743033
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞