zoukankan      html  css  js  c++  java
  • UVa1316 Supermarket

    题目大意

    有N个物品,每个物品在都有一个截止日期,如果在截止日期之前(包括截止日期)卖出将会获得相应的利润,卖出物品需要一个单位时间,问最多能获得多少利润?

    题解

    UVa1153的解题思路是一样的,用优先队列来维护(小根堆),先让物品按截止时间升序排序,设ans为已选择物品需花费的总时间(等于优先队列的元素个数),那么对于某个物品如果它的截止日期大于ans,则加入优先队列,如果小于或者等于ans,再判断它的利润是否大于优先队列中利润最低的那个物品的利润,如果大的话,用这个物品替换优先队列中利润最低的那个物品,用截止时间长利润大的物品替换截止时间短利润小的物品肯定是更优的选择

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define MAXN 10005
    typedef struct
    {
        int q;
        int d;
    } NODE;
    NODE a[MAXN];
    int n;
    bool cmp(NODE a,NODE b)
    {
        return a.d<b.d;
    }
    int main(void)
    {
        int i;
        long ans;
        while(cin>>n)
        {
            for(i=0; i<n; i++)
                scanf("%d%d",&a[i].q,&a[i].d);
            sort(a,a+n,cmp);
            priority_queue<int, vector<int>, greater<int> > q;
            while(!q.empty()) q.pop();
            ans=0;
            for(i=0; i<n; i++)
                if(a[i].d>q.size())
                {
                    ans+=a[i].q;
                    q.push(a[i].q);
                }
                else if(a[i].q>q.top())
                {
                    ans-=q.top();
                    q.pop();
                    ans+=a[i].q;
                    q.push(a[i].q);
                }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    docker容器跑tomcat遇到的坑
    PCL 编程多个点云合成
    PCL 常用小知识
    PCL点云库中的坐标系(CoordinateSystem)
    Ubuntu14.04(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境搭建
    Windows cmd 快捷操作
    #Pragma Pack与内存分配
    线段上的整数点个数
    基于PCL绘制模型并渲染
    rosbag数据记录及转换图片、视频
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3001881.html
Copyright © 2011-2022 走看看