zoukankan      html  css  js  c++  java
  • 「题解」HDU 7095 / 2021 年百度之星·程序设计大赛

    你有一个数字 (x) 和若干个操作,每个操作是 (+a_i) 或者乘 ( imes a_i) 中的一种。你可以重新排列这些操作的顺序,然后对数字 (x) 执行这些操作。

    比如说三个操作是 (+a_1,+a_2, imes a_3)。如果按顺序执行这三个操作,那么得到的结果是 (((x+a_1)+a_2) imes a3)。如果排列成 (+a_2, imes a_3,+a_1),那么得到的结果是 (((x+a_2) imes a_3)+a_1)

    我们会发现,有一些操作顺序计算出来的结果是本质相同的,比如说 (+a_1,+a_2, imes a_3) 和 $+a_2,+a_1, imes a_3 $这样运算下来结果是一样的。我们认为两个操作顺序计算的结果本质相同,当且仅当无论代入什么数,计算出来的结果都是一样的。

    请问有多少种本质不同的操作序列。换句话说就是最多能找到多少个操作序列,使得这些操作序列任意两个都不是本质相同的。由于答案很大,输出对 (10^9+7) 取模的结果。

    在这个题目中,我们只会给出加法操作和乘法操作的个数,分别是 (n,m),并不会给出具体的顺序和数字。容易发现,答案与具体的顺序和数字无关。

    (T) 组询问,(1leq Tleq 10^4,1leq n,mleq 3000)

    (x) 个有标号球放进 (y) 个有区分非空盒子方案数 (= y! imes)(x) 个有标号球放进 (y) 个无区分非空盒子方案数 (= egin{Bmatrix}x\yend{Bmatrix}y!),设其为 (calc(x,y))

    其中 (egin{Bmatrix}x\yend{Bmatrix}) 为第二类斯特林数。

    考虑枚举有 (i) 个连起来的乘法块,那么其方案数为 (calc(m,i))

    (i) 个乘法块形成了 ((i+1)) 个空隙,两边的 (2) 个可空,中间的 ((m-1)) 个非空。

    (n) 个加法有三种方法:

    1. 只放中间 ((m-1)) 个(钦点两个可空的都不放):(calc(n,i-1))

    2. 钦点一个可空的为非空的,另一个不放:(calc(n,i) imes 2)

    3. 钦点两个可空的为非空的:(calc(n,i+1))

    故答案为

    [sum_{i=1}^mcalc(m,i) imes(calc(n,i-1)+calc(n,i-1) imes 2+calc(n,i+1)) ]

    时间复杂度为 (mathcal{O}(m^2+Tm))

    Code

  • 相关阅读:
    Zabbix基本配置及监控主机
    利用XAG在RAC环境下实现GoldenGate自动Failover
    Oracle Database 12c Data Redaction介绍
    使用Oracle官方巡检工具ORAchk巡检数据库
    浅谈C# 多态
    Qt 操作Excel
    一个适用于任何继承于QObject的类的创建工厂
    QT5 控件增加背景图片(可缩放可旋转)的几种方法
    值得推荐和学习的C/C++框架和库
    gcc/g++编译
  • 原文地址:https://www.cnblogs.com/do-while-true/p/15171396.html
Copyright © 2011-2022 走看看