tokitsukaze and Soldier

tokitsukaze and Soldier

https://ac.nowcoder.com/acm/problem/50439

题意

个士兵,每个士兵都有一个战力值,和一个值,要求团队人数不超过,问可以组成的最大战力是多少。

分析

贪心,先按照对士兵排序,然后对于每个士兵,在他之前的士兵的值都比他大,所以我们可以求出当这个士兵的是士兵规模值时所能组成的战力和(贪心的减去前面武力最小的值)。
我们可以利用优先队列或者维护。

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define int long long
const int inf = 0x3f3f3f3f;
const int maxn = 201110;
const int M = 1e9+7;
int n,m,k,ok;

struct node
{
    int v,s;
}a[maxn];

bool cmp(node x,node y)
{
    return x.s > y.s;
}

signed main()
{
    cin>>n;
    for(int i = 1; i <= n; i++) 
    {
        cin>>a[i].v>>a[i].s;
    }
    sort(a+1,a+1+n,cmp);
    priority_queue<int, vector<int>, greater<int> > q;
    int ans = 0,res = 0;
    for(int i = 1; i <= n; i++) 
    {
        q.push(a[i].v);
        res += a[i].v;
        while(q.size() > a[i].s)
        {
            res -= q.top();
            q.pop();
        }
        ans = max(ans,res);
    }
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

2024-11-19 12:59
门头沟学院 测试开发
流浪offer计划:比起假惺惺的人才库,这才是冬日里的温暖
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务