zoukankan      html  css  js  c++  java
  • 模拟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$

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

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

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

  • 相关阅读:
    gRPC实战
    深入浅出docker
    jquery操作复选框(checkbox)的12个小技巧总结
    System.Diagnostics.Process.Start的妙用
    Redis持久化数据丢失及解决
    【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误"的解决办法
    asp.net 网页抓取内容
    Ajax学习资源大全[本来是转载的,但是现在我增加了很多]
    jquery如何判断checkbox(复选框)是否被选中
    JS获取屏幕高度
  • 原文地址:https://www.cnblogs.com/skyh/p/11220702.html
Copyright © 2011-2022 走看看