zoukankan      html  css  js  c++  java
  • 1006模拟题解

    1006国庆模拟题解

    T1

    emm……

    首先思考一下题目的要求。

    最简单最容易想到的,应该是(DFS)

    然鹅……

    今天代码实现的时候出了大问题……

    进去出不来了……

    淦!

    于是只能骗分,也是能想到的最简单的骗分方式。

    对于每一个(k==n-1)而言,

    显然我们只能够选择保留一座山峰。

    而无论保留哪座山峰,

    我们都不会积水。

    也就是说,积水体积为0。

    这意味着我们只需要固输(n)即可。

    50个点,过了2个。

    简直是非常绝妙的 得分 骗分手段!!!

    正解:

    考虑(DP)

    (f[i][j][p][0/1])表示前(i)列,最大值是(j),且要求在后面存一个高度至少为(j)的土地。

    已经铲平了(p)块。

    当前积水体积为奇数/偶数的方案数。

    由于至多会去掉(K)块土地,

    所以对于任意一个(i),(j)的值只有(K+1)种。

    前缀、后缀(DP)都做出,

    枚举最终最大值所在列合并答案,

    注意处理多个最大值的情况。

    时间复杂度(P(NK^2))

    T2

    按照中序遍历和先序遍历贪心均可。

    每一次检查当前点是否可以加入最终的树中,从当前点向上,每次遇到自己的左子树时,根据目前的情况计算右子树至少需要留下多少的点。

    计算得到一个点留下整棵树至少多大,如果不超过(K),则显然可以。

    由于读入的树时(AVL)树,树高为(log N)

    时间复杂度(O(NlogN))

    T3

    我有思路的另外一道题。

    直接暴力模拟,可以拿到(40)分。

    显然,最终的挖掘方案一定可以按照深度从小到大的顺序操作。

    那么在操作深度为(D)时,

    小于(D)的所有深度相应区间的土地一定都消失了。

    由于一次操作只可能影响同一个深度的土地,

    所以我们可以将每一行看成一个独立的问题,

    累加答案。

    剩下的问题就是如何处理一行。

    一个显然的贪心是区间中最靠前的一块土地肯定要被覆盖,

    最优的方式就是将其作为长度为(K)的区间的第一个。

    我们预处理出每个位置开始的倍增数组

    时间复杂度(O(H(W+Q)logW))

    T4

    看不懂

  • 相关阅读:
    Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
    基于Filebeat+Kafka+Flink仿天猫双11实时交易额
    Flink消费Kafka数据并把实时计算的结果导入到Redis
    Flink+kafka实现Wordcount实时计算
    Filebeat+Kafka+Logstash+ElasticSearch+Kibana搭建完整版
    spring boot+mybatis+quartz项目的搭建完整版
    Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql
    Swagger+AutoRest 生成web api客户端(.Net)
    NodeJS学习
    Go学习
  • 原文地址:https://www.cnblogs.com/JingFenHuanZhe/p/MoNI1006.html
Copyright © 2011-2022 走看看