码迷,mamicode.com
首页 > 其他好文 > 详细

supermarket

时间:2020-03-15 09:27:14      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:ons   题意   market   first   贪心   pop   并且   过期   scan   

# 题意
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\n", ans);
26    }
27 }

 

 

supermarket

标签:ons   题意   market   first   贪心   pop   并且   过期   scan   

原文地址:https://www.cnblogs.com/hhyx/p/12495744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!