zoukankan      html  css  js  c++  java
  • 51nod1163【贪心】

    思路:
    我们可以说:
    ①:价值大的不管时间早晚,都可以取,时间较晚的,本身就可以取,那么肯定是大的在前面取,但是在最前面那也是不对的,那么条件就是在规定的时间内,大的就是取了,因为他大,OK。
    ②:只要时间允许,怎么取都无所谓,时间不允许取所有,挑大的,如果时间上满足就加了,不满足的话我们要挑个比他小的而且时间还要在他前面。
    所以贪心策略就是先按照时间排下序,然后按照上面的想法操作。

    #include <stdio.h>
    #include <queue>
    #include <map>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    typedef long long LL;
    
    const int N=5e4+10;
    
    struct asd{
        int t;
        LL val;
    };
    asd q[N];
    bool cmp(asd x,asd y)
    {
        return x.t<y.t;
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d%lld",&q[i].t,&q[i].val);
        sort(q,q+n,cmp);
        LL ans=0;
    
        priority_queue<int ,vector<int >,greater<int> >que;
        for(int i=0;i<n;i++)
        {
            if(q[i].t>que.size())
            {
                ans+=q[i].val;
                que.push(q[i].val);
            }
            else
            {
                ans+=q[i].val;
                que.push(q[i].val);
                ans-=que.top();
                que.pop();
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    JS系统函数
    匿名函数
    使用递归计算1~n之间所有整数的和
    交换两个变量的值
    创建函数,传递一个数字n,返回斐波那契数列的第n的值。
    创建函数function
    打印本世纪(2000~2100)的前10个闰年
    打印九九乘法表
    计算1~100之间所有整数的和
    循环执行
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934831.html
Copyright © 2011-2022 走看看