贪心 Rainbow的商店

贪心

策略是把商品按价值从大到小排序,价值相同的过期日期大的在前面,设置一个标志数组visited,从过期日期向前依次安排卖的日期

#include <stdio.h>
#include <iostream>
#include <stack>
#include <string>
#include <set>
#include <memory.h>
#include <math.h>
#include <algorithm>
#include <queue>
using namespace std;
int N;
struct good
{
    int value,data;
    good( int vv = 0, int dd = 0 ):value(vv), data(dd){}
    friend bool operator <( const good &a, const good &b )
    {
        if( a.value != b.value )
        {
            return a.value < b.value;
        }
        else
        {
            return a.data > b.data;
        }
    }
};
priority_queue <good> GOODS;
int visited[100005];
int main()
{
    scanf("%d", &N);
    int Maxdate = 0;
    memset(visited, 0, sizeof(visited));
    for( int i = 0; i < N; i++ )
    {
        good a;
        scanf("%d %d", &a.value, &a.data);
        Maxdate = max( Maxdate, a.data );
        GOODS.push(a);
    }
    long long ans = 0;
    while( !GOODS.empty() )
    {
        good now = GOODS.top();
        int i;
        for( i = now.data; i >= 1; i-- )
        {
            if( !visited[i] )
            {
                visited[i] = 1;
                ans += now.value;
                break;
            }
            else
                continue;
        }
        GOODS.pop();
    }
    printf("%lld\n", ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xutian_curry/article/details/80326605