• 模拟73 题解


    A. 小P的2048

    简单模拟。

    B. 小P的单调数列

    首先有一个简单的dp。

    设$dp_{i,j}$表示已经选择的最后一个是第$i$个数,已经有了$j$个单调段。

    转移并不困难,简单数据结构维护一下可以做到$O(n^2logn)$

    然后发现这个dp的第二维其实可以省去。

    二分答案,那么增加单调段的时候减掉二分的值即可。

    这样可以$O(nlog^2)$,其实应该可以通过。

    然而正解只有一个log。

    结论是:一定存在一个答案,只有不超过两个单调段。

    其正确性是显然的。

    设存在第三个段,那么有两种情况:

    第三个段的值大于等于前两个段的平均值,那么前两个段没有必要。

    第三个段的值小于前两个段的平均值,那么可以删掉第三个段。

    同理更多的段也是没有必要的。

    所以只要正反求最长上升子序列。

    注意离散化已经$unique$后,数组大小不再是n,不要因此挂分。

    C. 小P的生成树

    一道很好的生成树题。

    利用的思想大概是:

    在一段区间中所有边的大小关系是确定的,那么可以将这一段区间中选出一个代表元素。

    然后求出生成树即可。

    具体来说,

    当我们已经知道最大生成树的最终和,

    问题转化为如何使给定的边在该向量上的投影最大。

    然而这个向量可能有很多,无法枚举。

    于是考虑对于每个范围只枚举一个,因为每个范围中,所有边的大小关系确定,那么可以算出最终答案。

    枚举两条边,那么可以求出使这两条边投影相同的两个向量,将这些向量用角表示出来。

    对这些角排序。

    取相邻两个角中间的角,视作该区间的代表元素,算出一组答案,并尝试更新最终答案。

  • 相关阅读:
    ASC1 C New Year Bonus Grant
    CodeForces 180C Letter
    Codeforces 71C Round Table Knights
    GCPC2014 J Not a subsequence
    treeview自动从表中添加标题和列值做目录的方法2
    delphi学习treeview中从表列名和数据添加为目录并双击自动选中
    对一个表中所有列数据模糊查询adoquery
    单击dbgrid列标题排序 升降序
    从右键菜单里粘贴复制的工资到数据库里
    如何从右键弹出菜单中清空删除数据加清空前提问确定
  • 原文地址:https://www.cnblogs.com/skyh/p/11674351.html
Copyright © 2020-2023  润新知