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;
    }
  • 相关阅读:
    判断pc端或移动端并跳转
    拖动验证码插件
    angularjs 简易模态框
    angularjs 设置全局变量的3种方法
    摄影之HDR
    CentOS上使用yum安装Apache
    CentOs6.5中安装和配置vsftp简明教程
    python 安装easy_install和pip
    linux mysql 操作命令
    .net源码分析
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3001881.html
Copyright © 2011-2022 走看看