【贪心】zoj2921 stock

原创 2012年03月30日 16:21:03

一开始想到是贪心了,以为是每次找出最高价格,然后在前面寻找最小的、次小的...直至所有的股票卖完或者达到卖股票的上限,超时超到死啊。。。。。后来才明白,从最后一个元素开始贪心,并用优先队列进行组织,可达到O(nlgn)的时间复杂度,这回是真的长见识了。。。。


为什么从最后一个开始呢?原因也很简单,最后一天的股票只能在最后一天卖出去,其他天数的股票只能在当天以及以后的天数里卖出去,从这里面选一个最高价格进行贪心即可。大体就是这样的,比较细致的地方大家可以自己再好好想想。


不过想到这种贪心方法,真的真的很不容易,最起码我有这种感觉。。。。

#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
struct Node{
	int acquire;
	int price;
	int sell;
	friend bool operator< (Node n1,Node n2){
		return n1.price<n2.price;
	}
};
Node node[100005];
priority_queue<Node> q;
int main(){
	int t,sum,n;
	cin>>t;
	while(t--){
		sum=0;
		cin>>n;
		for(int i=0;i<n;i++)
			cin>>node[i].acquire>>node[i].price>>node[i].sell;
		while(q.empty()==false)
			q.pop();
		for(int i=n-1;i>=0;i--){
			q.push(node[i]);
			//Node tmp=q.top();
			while(q.empty()==false&&node[i].acquire>0){
				Node tmp=q.top();
				q.pop();
				if(tmp.sell>node[i].acquire){
					sum+=node[i].acquire*tmp.price;
					tmp.sell-=node[i].acquire;
					node[i].acquire=0;
					q.push(tmp);
				}
				else{
					node[i].acquire-=tmp.sell;
					sum+=tmp.sell*tmp.price;
				}
			}
		}
		cout<<sum<<endl;
	}
	//system("pause");
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Stock (zoj 2921 贪心经典)

题意:有n张股票,给出每天股票的买进数量,当天的股票价格和当天最大抛出量,第i天得到的股票当天可以不抛,可以留到以后抛。问这n天最多能卖多少钱? 思路:贪心,从后往前贪心,最后一天的股票当然只能在最后...

zoj 2921 Stock(贪心)

Optiver sponsored problem. After years of hard work Optiver has developed a mathematical model tha...

poj3903--Stock Exchange--nlogn贪心求最长上升子序列

Stock Exchange Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3086   ...

LeetCode--Best Time to Buy and Sell Stock (贪心策略 or 动态规划)

LeetCode Problem -- Best Time to Buy and Sell Stock Greedy Algorithms 贪心算法

LeetCode -- Best Time to Buy and Sell Stock II (贪心策略,差分序列)

LeetCode -- Best Time to Buy and Sell Stock II (贪心策略,差分序列) IT code Interview 程序员面试题,贪心策略,差分序列

[C++]LeetCode: 77 Best Time to Buy and Sell Stock II (贪心算法)

题目: Say you have an array for which the ith element is the price of a given stock on day i. De...

Best Time to Buy and Sell Stock II(JAVA)--贪心算法

题目内容: Say you have an array for which the ith element is the price of a given stock on day i. Desi...

LeetCode 贪心 | 122. Best Time to Buy and Sell Stock II

Leetcode122. Best Time to Buy and Sell Stock II

ZOJ 3963 Heap Partition(贪心)

A sequence S={s1,s2,...,sn}S = \{s_1, s_2, ..., s_n\} is called heapable if there exists a binary tr...

zoj 1093 贪心法+动态规划

Monkey and Banana 太帅了, 以前不知道怎么做的题,今天一次提交一次通过。这是对我努力的一种肯定。 这道题我觉得是贪心法加动态规划,一开始把长宽小的置前,然后用类似求最...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)