https://ac.nowcoder.com/acm/problem/50995
题意:
超市有n件物品,已知它们的利润p和过期时间d,每天只能卖一件一件物品,过期的物品不能售卖,合理安排每天售卖的物品,问最大利润是多少?
~多组数据输入输出
分析:
最大价值中先要保证物品不过期,先按日期正序排序,排序后把物品的价值放入优先队列(正序队列)中,如果队列物品数量大于当前物品的截止时间,那么把队列排头丢掉,这货利润这么低,用后面的物品可以完全代替了。最后统计求和一下优先队列里面的所有值就行了。
代码:
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,i,j;
struct Hi{
int p,d;
}a[10005];
int c[10005];
int cmp(Hi A,Hi B){
return A.d<B.d;
}
int main()
{
while(~scanf("%d",&n)){
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
for(i=0;i<n;i++){
scanf("%d%d",&a[i].p,&a[i].d);
}
sort(a,a+n,cmp);
priority_queue <int,vector<int>,greater<int>> q;
for(i=0;i<n;i++){
q.push(a[i].p);
if(a[i].d<q.size()){
q.pop();
}
}
int sum=0;
while(!q.empty()){
sum+=q.top();
q.pop();
}
printf("%d\n",sum);
}
}
京公网安备 11010502036488号