supermarket

Posted hhyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了supermarket相关的知识,希望对你有一定的参考价值。

# 题意
n件商品,每个商品有利润p[ i ]和过期时间d[ i ],每天只能卖一件商品,合理安排每天卖的商品,求最大收益

# 题解
贪心做法,将所有商品按照过期时间的大小排序,从小到大依次将商品加入小根堆(p为键值)
加入p[i]时:
1.如果p[i]的时间大于堆中元素的个数,则放入堆
2.如果当前时间等于堆中的元素个数,并且当前元素的利润大于小根堆的堆顶元素,将两者互换
3.小于堆中的元素就不用加入
显然,局部最优解的递推可以得到整体最优解

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e4+10;
 4 typedef pair<int,int>PII;
 5 int main(){
 6    int n;
 7    while(scanf("%d",&n)!=EOF) {
 8       PII p[N];
 9       for (int i = 1; i <= n; i++) scanf("%d%d", &p[i].second, &p[i].first);
10       priority_queue<int, vector<int>, greater<int>> h;
11       sort(p + 1, p + n + 1);
12       for (int i = 1; i <= n; i++) {
13          if(p[i].first==h.size()&&h.top() < p[i].second)
14          {
15             h.pop();
16             h.push(p[i].second);
17          }
18          else if(p[i].first > h.size()) h.push(p[i].second);
19       }
20       int ans=0;
21       while (h.size()) {
22          ans += h.top();
23          h.pop();
24       }
25       printf("%d
", ans);
26    }
27 }

 

 

以上是关于supermarket的主要内容,如果未能解决你的问题,请参考以下文章

poj1456Supermarket——并查集压缩查找

POJ-1456 Supermarket贪心+并查集

[POJ1456]Supermarket(贪心 + 优先队列 || 并查集)

nyoj 208 + poj 1456 Supermarket (贪心)

POJ1456 Supermarket

supermarket