• 模拟6 题解


    A. 那一天我们许下约定

    在写出来复杂度为$O(nmd)$的简单dp后,我们考虑优化。

    题中D的范围远大与N和M,

    我们在dp的过程中,很多一个饼干都不给的天数是无效的一天。

    于是我们dp出用i的有效天分完n个饼干的方案数,

    然后把这i个有效天分配到d天里即可。

    $ans= sum limits_{i=1}^{n} dp(i,0)* inom{d}{i} $

    B. 那一天她离我而去

     暴力思路1:用最短路处理估价函数,dfs。

          $Accepted$

    暴力思路2:枚举与起点相连的每条边并删除,分别跑最短路尝试更新答案。

          $Accepted$

    暴力思路3:将所有与起点相连的边删除,从这些相连的点跑到其他相连点的最短路尝试更新答案。

          $Accepted$

    正解:

    尝试优化暴力思路3。

    发现这个算法有一部分冗余,我们可以分组进行最短路。

    因为任意两个不同的点,二进制一定至少存在一位不同。

    我们以每个二进制位的0,1进行分组,

    每组点组成的环一定被至少一次更新,于是可以达到目的。

    复杂度$O(m log^2n)$

    $Accepted$

    C. 哪一天她能重回我身边

    考虑将题意转化为一个图。

    即我们将每张牌的反面对应数字向正面建边。

    我们的目标转化为:

    求翻转最少的边数,使每个点的入度都不大于1,并求出方案数。

    dp即可。

    对于每个联通块:

    设n为点数,m为边数。

    1.联通块是树,即

    $m=n-1$

    以任意一点为根节点,尝试使除根节点外的点入度为1,得到根此时的最少翻转次数。

    换根dp,即可得到其它点作根节点的翻转次数。

    2.联通块是基环树,即

    $m=n$

    基环树一定为外向基环树,尝试使环上的点顺时针或逆时针,

    不在环上的点直接树形dp即可。

    3.联通块是不可能做到每个点入度不大于1,即

    $m>n$

    循环直接跳出,输出无解。

    最终我们的最小翻转次数是每个联通块的最小翻转次数求和,

    所对应的方案数是每个联通块达到最小的方案数求乘积。

  • 相关阅读:
    Educational Codeforces Round 67 D. Subarray Sorting
    2019 Multi-University Training Contest 5
    Educational Codeforces Round 69 (Rated for Div. 2) E. Culture Code
    Educational Codeforces Round 69 D. Yet Another Subarray Problem
    2019牛客暑期多校训练第六场
    Educational Codeforces Round 68 E. Count The Rectangles
    2019牛客多校第五场题解
    2019 Multi-University Training Contest 3
    2019 Multi-University Training Contest 2
    [模板] 三维偏序
  • 原文地址:https://www.cnblogs.com/skyh/p/11220702.html
Copyright © 2020-2023  润新知