【POJ 1456】 Supermarket

【题目链接】

            http://poj.org/problem?id=1456

【算法】

           贪心 + 堆

【代码】

          

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 10010

struct info
{
        int p,d;
} a[MAXN];

int i,n,ans;
priority_queue< int,vector<int>,greater<int> > q;

inline bool cmp(info a,info b)
{
        return a.d < b.d;
}

int main() 
{
        
        while (scanf("%d",&n) != EOF)
        {
                ans = 0;
                while (!q.empty()) q.pop();
                for (i = 1; i <= n; i++) scanf("%d%d",&a[i].p,&a[i].d);
                sort(a+1,a+n+1,cmp);
                for (i = 1; i <= n; i++)
                {
                        if (q.size() < a[i].d) q.push(a[i].p);
                        else if (a[i].p > q.top()) 
                        {
                                q.pop();
                                q.push(a[i].p);
                        }
                }
                while (!q.empty())
                {
                        ans += q.top();
                        q.pop();
                }
                printf("%d\n",ans);
        }
        
        return 0;
    
}

猜你喜欢

转载自www.cnblogs.com/evenbao/p/9251054.html