zoukankan      html  css  js  c++  java
  • 10.27,28考试总结

    27
    T2
    小 Z 按时间点从早到晚对 N 位同学排序并依 次编号为 1..N 。但小 Z 并不知道运送行李的货车会在什么时候到来,为了避免 同学
    们在宿舍楼下等待太长时间,小 Z 规定,只留最后一位准备好行李的同学 在宿舍楼下看守着行李,若第 i 位同学收拾
    好行李后,货车恰好到来,则由这 位同学和小 Z 一起把前 i 位同学的行李搬上货车。 但由于货车有载重量 M 的限制
    ,小 Z 计划,当货车来临时,会在已经收拾 好行李的前 i 位同学中,在必定选取第 i 位同学的行李的前提下,选取
    尽可能 多的同学的行李,优先把他们的行李搬回家。已知货车载重量为 M ,第 i 位同 学的行李重量为 a[i] ,你能
    计算出在任何一种情况下,当货车运走第一批行李 后,会剩下多少位已经收拾好行李的同学,享受不到优先运送行李的服务吗

    用权值线段树+线段树上二分即可,全值线段树维护个数和和

    T3
    小 Z 带来的糖果比较特别,一共有 N 个糖果连成一串,编号为 1..N,第 i 个糖果有一个数值 a[i] 表示蛀牙的可能性,数值越大的糖果越容易
    导致蛀牙, 多个糖果的蛀牙值认为是各个糖果的蛀牙值之和。 现在小 Z 打算取 N 个糖果的前若干个,分成 K 段分给 K 个
    孩子。小 Z 好奇, 他该怎么分糖果,才能使得分到糖果蛀牙值最大的孩子尽可能不蛀牙

    二分+dp+树状数组
    最大值最小很容易想到二分答案。

    然后关键是怎么写 judge

    函数。

    设 f[i]
    表示前 i

    个数最多能分成多少段。

    转移则有 f[i]=max(f[j]+1)
    ,其中要满足 sum[i]−sum[j]<=mid

    这样就可以做到 O(n2)
    的 dp

    考虑用数据结构优化一下。

    把转移条件换一下形式写成 sum[j]>=sum[i]−mid

    然后发现他是一个后缀最大值的东东。

    考虑权值线段树或者树状数组,这里 a[i]

    的范围比较大,所以我们考虑离线之后用树状数组。

    复杂度 O(nlog2n)

    T1
    排列的一个规律题,当前排列的下一个排列,就是当前排列从后向前找,找到第一个不递增的位置,然后在
    这个位置的后面找一个大于当前位置但是最小的一个数,把当前位置替换成这个数,然后剩下的数顺序排列就好了;

  • 相关阅读:
    idea 没有 persistence
    java 枚举(二) 级联关系
    java to edi 动态/静态映射
    edi to java
    C# 扩展方法
    最详细的C++对应C#的数据类型转换
    c# .Net随机生成字符串代码
    遍历结构体内部元素和值(Name and Value)
    寒假学习计划
    python os.path模块
  • 原文地址:https://www.cnblogs.com/Aswert/p/13895874.html
Copyright © 2011-2022 走看看