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 }
  • 相关阅读:
    scrapy的自动限速(AutoThrottle)扩展
    js可以控制文件上传的速度吗?
    用DataReader 分页与几种传统的分页方法的比较
    jdbc分页查询
    几种分页方式分析.
    mybatis下的分页,支持所有的数据库
    java 物理分页和逻辑分页
    IBatis的分页研究
    JDBC分页
    用Java实现异构数据库的高效通用分页查询功能
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-854c.html
Copyright © 2011-2022 走看看