• 模拟57 题解


    A. 天空龙

    一个很好的性质是:最优方案可以不存在一个颜色A,转化为B再转化为C。

    因为将A直接转化为C一定更优。

    所以无需分类讨论,直接用一个sum判断正负就可以了。

    B. 巨神兵

    有向图无环,所以存在拓扑序,所以用分层图dp。

    设f(i,j)表示已经考虑点集i,并且点集j在分层图的最后一层。

    显然j是i的子集,转移到的状态又是i的超集。

    枚举i的超集作为分层图的下一层,推一推转移系数就可以了。

    用枚举子集的方法,总复杂度为$O(4^nm)$。

    正解成功压掉了j一维,并用新增点的奇偶性对应1和-1作容斥系数,直接进行dp。

    原因大概是,每一个分层图的不同层,被划分为了从不同的集合转移而来。

    C. 太阳神

    发现问题的正向比较复杂,于是考虑逆问题。

    $sum limits_{a=1}^{n} sum limits_{b=1}^{n}[lcm(a,b)<=n]$

    $=sum limits_{d=1}^{n} sum limits_{a=1}^{n} sum limits_{b=1}^{n}[frac{ab}{d}<=n][gcd(a,b)==d]$

    $=sum limits_{d=1}^{n} sum limits_{a=1}^{n/d} sum limits_{b=1}^{n/d}[ab<=n/d][gcd(a,b)==1]$

    设$f(n)=sum limits_{i=1}^{n} sum limits_{j=1}^{n}[i*j<=n][gcd(i,j)==1]$
    原式$=sum limits_{d=1}^{n} f(n/d)$

    设$sum(n)=sum limits_{i=1}^n sum limits_{j=1}^n [i*j<=n]$
    显然$sum(n)$可以用整除分块$O(sqrt n)$求出。

    那么$f(n)=sum(n)-sum limits_{i=2}^{sqrt n} f(frac{n}{i^2})$
    即枚举不合法的$gcd$为什么,继续递归进行。

    为了保证复杂度为$O(n^{frac{2}{3}})$而不是$O(n^{frac{3}{4}})$,还需要写一个线性筛出$n^{frac{2}{3}}$以内的函数值。

    不妨只考虑增量$f(i)-f(i-1)$也就是$sum limits_{i=1}^{n} sum limits_{j=1}^{n}[lcm(i,j)==n]$

    设$n$有$k$个质因子,那么$f(i)-f(i-1)=2^k$,所以筛质因子个数。

    在主函数中整除分块统计答案$f$即可。

  • 相关阅读:
    Canvas与Paint的0基础使用
    PHP经常使用功能
    java枚举在android项目应用
    POJ1833 &amp; POJ3187 &amp; POJ3785 next_permutation应用
    usb芯片调试经验
    Equals和==比較
    JSTL标准标签库具体解释
    零基础学python-3.3 标识符
    用react native 做的一个推酷client
    Linux异常关机后,Mysql启动出错ERROR 2002 (HY000)
  • 原文地址:https://www.cnblogs.com/skyh/p/11620712.html
Copyright © 2020-2023  润新知