zoukankan      html  css  js  c++  java
  • 2017级算法模拟上机准备篇(贪心 进阶_1)

    AlvinZH想回家

    这道题本质上还是贪心与算法的简单的结合,有一个小的trick值的主要一下,结构体优先队列的运算符重载问题。

     bool operator<(const Flight& b) const {
            return c < b.c;
        }

    对于每一步都需要当前最大值的问题,我们可以使用优先队列来辅助我们进行操作。

    bool operator <(const Time& a,const Time& b){
        return a.start > b.start;
    }  //这里以大于重载小于是因为默认情况下,优先队列是以大的作为队首,这样一反,就可以再默认情况下使得小的作为队首
    struct Time{  
        int start, end;  
        bool operator < (const Time& t)const{  
            return start > t.start;  
        }  
    };  
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    using namespace std;
    const int maxlen=500010;
    //不能早于最早的开发时间 那只需要在每次预定的时间内 选择延迟费用最高的航班即可
    struct flight{
        int c,id;
        bool operator < (const flight& b) const{
            return c < b.c;
        }
    }ar[500005],t;
    long long ans=0;
    priority_queue<flight> q;
    
    int main(){
        //每次都要取当前的最大值 要考虑到优先队列呀
        //结构体优先队列的操作符号的 重加载
        int n,i,j,k;
        while(~scanf("%d %d",&n,&k)){
            
            ans=0;
            for(int i=1;i<=n;i++){
                scanf("%d",&ar[i].c);
                ar[i].id=i;
            }
            for(i=1;i<=k;i++)
                q.push(ar[i]);
            for(int i=k+1;i<=k+n;i++){
                if(i<=n)
                    q.push(ar[i]);
                t=q.top();
                q.pop();
                ans += (long long)t.c * (i-t.id);
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    C++中获取高精度时间差
    有关宏的一个问题
    HDU 2504 又见GCD
    .NET中统一的存储过程调用方法(收藏)
    如何让你的SQL运行得更快
    最赚钱的5种成功创业可行方式
    SQL语句优化技术分析
    js document.getElementByID("aa")的位置
    写SQL时尽量不要对字段进行运算操作
    连接池的问题
  • 原文地址:https://www.cnblogs.com/visper/p/10152059.html
Copyright © 2011-2022 走看看