zoukankan      html  css  js  c++  java
  • Planning CodeForces

    Planning CodeForces - 854C

    题意:有n架航班,第i架原先的时候是在第i分钟起飞的。现在前k分钟无法有飞机起飞,因此需要调整安排表,延后飞机起飞。仍然要求每一分钟只有一架飞机起飞。第i架飞机延误一分钟需要损失ci的钱。不能使飞机起飞的时间早于原先安排中起飞的时间。求如何安排新安排表使损失钱数最少。

    方法:

    显然,如果在第i分钟有一些飞机延误,那么一架飞机的c值越大,这一分钟产生的损失也越大,而使这一分钟产生的损失尽可能的小并不会导致接下来时间产生的损失增大。因此应当每一分钟都找出要飞的飞机中c值最大的飞走。而举个例子,第k+1分钟有1~k+1架飞机可以飞,第二分钟可以飞的飞机多了一个第k+2架,少了一个第一分钟飞走的。

    说白了就是第i分钟,应该从1~i架航班中未飞出的航班中选出ci最大的飞走.

    由于需要将数据放入某结构、找出结构中最大值、去掉结构中最大值,可以考虑使用优先队列。

     1 #include<cstdio>
     2 #include<queue>
     3 using namespace std;
     4 typedef long long LL;
     5 struct Flight
     6 {
     7     LL c,num;
     8     bool operator<(const Flight& b) const
     9     {
    10         return c<b.c;
    11     }
    12 }c[300100],t;
    13 LL n,k,ans;
    14 LL ans2[300100];
    15 priority_queue<Flight> q;
    16 int main()
    17 {
    18     LL i;
    19     scanf("%I64d%I64d",&n,&k);
    20     for(i=1;i<=n;i++)
    21     {
    22         scanf("%I64d",&c[i].c);
    23         c[i].num=i;
    24     }
    25     for(i=1;i<=k;i++)
    26         q.push(c[i]);
    27     for(i=k+1;i<=k+n;i++)
    28     {
    29         if(i<=n)    q.push(c[i]);
    30         t=q.top();
    31         q.pop();
    32         ans+=t.c*(i-t.num);
    33         ans2[t.num]=i;
    34     }
    35     printf("%I64d
    ",ans);
    36     for(i=1;i<=n;i++)
    37         printf("%I64d ",ans2[i]);
    38     return 0;
    39 }
  • 相关阅读:
    数据库常用术语
    灾备模式的基本体系架构
    linux下的c++开发
    视图矩阵的推导-opengl应用
    抓包实例
    以软件推动工业进步 -嵌入式学习网站
    web 前端 转盘界面
    web 汇率
    xml
    高性能网站架构设计之缓存篇(4)- 主从复制
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-854c.html
Copyright © 2011-2022 走看看