zoukankan      html  css  js  c++  java
  • 模拟测试53

    T1:

      我们不仅可以维护差分,还可以维护差分的差分,两次前缀和即可。

      注意区间可能延伸到矩形之外,特判一下即可。

      时间复杂度$O(n^2)$

    T2:

      可以状压DP或记忆化搜索。

      记录状态为当前哪些小球被拿走了,然后逆推转移就行了。

      但是小球的颜色只有两种,我们可以将状态定义重设为剩下小球的颜色。

      这样大大减少了状态数。

      时间复杂度$O(nk2^{C_n^k})$

    T3:

      DP神题。

      根据贪心思想,一条边至多会被覆盖一次。

      因为如果一条边被两条路径覆盖,从这条边两侧截开这两条路径一定能使答案更优。

      以二元组的形式进行DP,要在first尽可能小的情况下使second尽可能小。

      设$dp[i][0/1]$表示在以$i$为根的子树内,有/无向上延伸的路径的方案数。

      则对于每个节点,我们可以将所有儿子延伸上来的路径两两匹配,只有最大化匹配,first才会尽可能优。

      就用两个变量$now1$与$nxt1$和$now2$与$nxt2$分别滚动记录该节点有奇数个路径和有偶数条路径的最优值。

      $now1$初值为$inf$,$now2$初值为$0$,枚举所有儿子:

        $nxt1=min(now1+dp[y][0],now2+dp[y][1])$

        $nxt2=min(now1+dp[y][1],now2+dp[y][0])$

        $now1=nxt1,now2=nxt2$

      实质上就是对所有儿子进行匹配,求出最优方案。

      然而方案是分奇偶的,如果当前儿子中有偶数条路径,不延伸的情况更优,反之延伸的情况更优。

      然后讨论该点的限制,考虑该点是否可以向上延伸,是否必须向上延伸。

      上面的$now1$及$now2$仅考虑了子树内部,用加一调节即可。

      时间复杂度$O(n)$

  • 相关阅读:
    Dockerfile 指令 VOLUME 介绍
    Spring boot(4)-应用打包部署
    Docker Dockerfile详解
    poj-1045(数学不好怪我咯)
    poj-3185-开关问题
    poj-1163-The Triangle
    归并排序(Merge Sort)
    交换排序—快速排序(Quick Sort)
    交换排序—冒泡排序(Bubble Sort)
    选择排序—堆排序(Heap Sort) 没看明白,不解释
  • 原文地址:https://www.cnblogs.com/hz-Rockstar/p/11602465.html
Copyright © 2011-2022 走看看