2014年9月19日 星期五

2014/9/19 codevs 1052 地鼠游戏

/*
    如果想的到要反著做
    那接下來就容易了xDDD
*/
// http://codevs.cn/problem/1052/
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

int N;
priority_queue<int> pri;

int last[200], score[200], sp[200];

bool cmp(int a, int b)
{
    return last[a] < last[b];
}

int main()
{
    scanf("%d", &N);

    for(int Ni = 0; Ni < N; Ni++)
        sp[Ni] = Ni;

    for(int Ni = 0; Ni < N; Ni++)
        scanf("%d", &last[Ni]);

    for(int Ni = 0; Ni < N; Ni++)
        scanf("%d", &score[Ni]);

    sort(sp, sp+N, cmp);

    int now = 2000000000; int _Ni = N-1; int Ans = 0;

    while(1)
    {
        if( !pri.empty() )
        {
            Ans += pri.top();
            pri.pop();
            now--;
            if( now == 0 ) break;
        }
        else
        {
            if( _Ni < 0 ) break;
            now = last[sp[_Ni] ];
        }

        while( _Ni >= 0 && last[sp[_Ni] ] >= now )
            pri.push(score[sp[_Ni--] ]);


    }

    printf("%d\n", Ans);
}

沒有留言:

張貼留言