POJ 1456 Supermarket

POJ 1456 Supermarket 题解

题目大意:给定N个商品,每个商品有利润 Pi 和过期时间 Di ,每天只能卖一个商品,过期商品不能再卖,求如何安排每天的商                   品,可以使收益最大。 【网址:点击打开链接】

主要思路:先将商品按照过期日期从小到大sort一遍。

                 建立一个小根堆Q【用于存当前的利润】

                 如果当前商品的过期日期=堆Q内的商品个数:比较堆顶元素与此商品的利润,选取最大值

                 若当前商品的过期日期大于当前堆Q中的商品个数 :将此商品的利润插入堆中

                 最后,遍历一遍堆,利润和即为最大值  

注:当N=0时,输出0。【多组数据】

代码如下:

#include
#include
#include
#include

using namespace std;

priority_queue ,greater > Q;//建立小根堆

struct node{
	    int day,num;
	   }arr[10050];
					
int cmp(node a,node b)
{
	return a.day Q.size() )
		  Q.push(arr[i].num);
		else if(arr[i].day==Q.size() )
		   {
			if( arr[i].num>Q.top() )
			{
			Q.pop();
			Q.push(arr[i].num);
		    }
	       }
	}
	while( !Q.empty() )//遍历小根堆
	{
		ans+=Q.top();
		Q.pop();
	}
	cout << ans <

                                                                                                                                                                 左岸夜亦冷

                                                                                                                                                                   2018.4.25

你可能感兴趣的:(POJ 1456 Supermarket)