Tokitsukaze y soldado-模拟

Portal: Tokitsukaze y Soldado
significado de las preguntas: Pick n soldados de un equipo de combate de gran valor, cada soldado tiene dos propiedades y v s, v representa la lucha, s representación en la que el equipo no puede ser mayor que s. Buscando valor máximo de la lucha.
Práctica: es para todos los soldados de acuerdo con la orden ascendente, cada vez que el soldado como un soldado debe ser añadido, se ha agregado a los soldados en la cola de prioridad en orden descendente por v, cuando pq.size ()> s soldados corriente, pasó de cola de pop-ahora-top (). v, grabado en el máximo ahora.

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
struct ac{
    int v,s;
    bool operator <(const ac& a)const {
       return  v>a.v;
    }
}a[maxn];
bool cmp(ac a1,ac a2){
    if(a1.s==a2.s) return a1.v>a2.v;
    return a1.s>a2.s;
}
priority_queue<ac> pq;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d%d",&a[i].v,&a[i].s);
    }
    sort(a+1,a+1+n,cmp);
    long long now=0,ans=0;
    int i=0;
    a[0].s=n+10;
    for(int i=1;i<=n;++i){
        now+=a[i].v;
        while(pq.size()>0&&pq.size()+1>a[i].s){
            now-=pq.top().v;
            pq.pop();
        }
        pq.push(a[i]);
        ans=max(ans,now);
    }
    cout<<ans<<endl;
    return 0;
}
Publicado 96 artículos originales · ganado elogios 11 · vistas 2258

Supongo que te gusta

Origin blog.csdn.net/weixin_43769146/article/details/104059669
Recomendado
Clasificación