找回密码
 立即注册
首页 业界区 安全 10 9
钦娅芬 昨天 22:10
part 13

  • T1

    • 可以发现就是求拓扑排序的方案数
    • 初始答案为 \(\frac{n!}{size_x}\)
    • 考虑有 \(q\) 次删除操作,我们考虑维护当前还剩多少个数 \(m\)
    • 假如删除的数为 \(x\),则先计算 \(size_x\) 再向上用 \(map\) 打标记,统计答案即可
    • 卡在的点在于不会在 \(O(\sqrt{N})\) 的时间内求解 \(n!\)

  • P4360 斜率优化转移DP

    • 我们可以发现 伐木场的个数只有两个,故可以考虑直接 dp 转移
    • 定义 \(g_i\) 为只有一个伐木场并且建造在 \(i\) 处的 \(1-i\) 的花费总和
    • 假设第 \(i\) 棵树重 \(a_i\),第 \(i\) 棵树在 \(X_i\) 的位置上
    • 定义 \(f_i\) 为有两个伐木场其中一个是 \(i\),另一个 \(j < i\) 的 \(1-j\) 最小 花费总和
    • 我们故可以得到转移方程

      • \(f_i = \min(g_j + a_{j+1} \cdot (X_i - X_{j+1}) + a_{j+2} \cdot (X_i - X_{j+2})) + …… + a_{i-1} \cdot (X_i - X_{i-1}) + a_i \cdot (X_i - X_i)\)

    • 我们可以将式子展开
    • 我们记 \(suma_i = \sum_{j=1}^{i} a_j\),\(dis_i = \sum_{j=1}^{i} a_j \cdot X_j\)
    • 则 \(f_i = \min(g_j + (suma_i - suma_{j}) \cdot X_i - (dis_i - dis_{j}))\)
    • 展开即可得到 \(suma_{j} \cdot X_i + f_i - suma_i \cdot X_i + dis_i = g_j + dis_{j}\)
    • 故我们可以发现 \(X_i\) 单调递增,故可以使用斜率优化转移 DP,\(O(N)\) 解决

  • p3628 斜率优化转移DP

    • 定义 \(sum_i = \sum_{j=1}^{i} x_i\)
    • 定义 \(dp_i\) 表示给 \(1-i\) 都分配了军队后的最大战斗力之和


      • \(dp_i = \max(dp_j + a \cdot (sum_i - sum_j)^2 + b \cdot (sum_i - sum_j) + c)\)
      • 即为 \(dp_i = \max(a\cdot (sum_i)^2 + b \cdot sum_i - 2 \cdot a \cdot sum_i \cdot sum_j + a \cdot (sum_j)^2 - b \cdot sum_j + c + dp_j)\)
      • 则有 \(2 \cdot a \cdot sum_i \cdot sum_j - c + dp_i - a\cdot (sum_i)^2 - b \cdot sum_i = a \cdot (sum_j)^2 - b \cdot sum_j + dp_j\)

    • 则有 \(ax + b = y\) 的形式
    • 考虑 \(2a\cdot sum_i\) 单调递减,\(sum_j\) 单调递增
    • 又由于是求取最大值故可以考虑维护上凸壳进行求解复杂度为 \(O(N)\)

  • P1365 期望DP

    • 定义 \(f_i\) 为遍历到 \(i\) 的期望值
    • 我们考虑时刻维护 \(len\) 表示 ooo 的连续段的期望值

      • 若 \(i\) 为 o 则 \(f_i = f_{i - 1} + 2 \cdot len + 1\),\(len = len + 1\)
      • 若 \(i\) 为 x 则 \(f_i = f_{i - 1}\),\(len = 0\)
      • 若 \(i\) 为 ? 则 \(f_i = f_{i - 1} + len + 0.5\), \(len = \frac{len+1}{2}\)


  • P6280

    • 一眼就想到了是由若干环组成的,进行恰好 \(k\) 步可以等价于所有环长的最小公倍数等于 \(k\)
    • 然后又一眼想出,如果我们用了一些数它们的和小于 \(n\),那么我们可以用若干个环长为 1 的环来保证它们的最小公倍数不变
    • 由于一些数的 lcm 为这些数每个质数的指数的 max 的乘积,故我们可以想到可以使用 \(p_1^{a_1},p_2^{a_2}……p_m^{a_m}\) 使得在和最小的情况下,lcm 最大
    • 故我们可以定义 \(f_{i,j}\) 表示到了第 \(i\) 个质数,前面选的环的数的总和为 \(j\) 的乘积总和
    • 转移枚举第 \(i\) 个质数的指数,转移即可

  • p4161

    • 同上题一样只是需要求方案数

  • p4284 概率DP

    • 我们考虑先算以 \(x\) 为根的子树对 \(x\) 的影响
    • 定义 \(f_x\) 为 \(x\) 被通电的概率
    • 我们令当前遍历到了子节点 \(nx\)

      • 令 \(w = f_{nx} \cdot p_{x,nx}\)
      • 那么 \(f_x = f_x + w - (f_x \cdot w)\)

    • 接下来我们考虑如何将父节点上的信息传递到子节点
    • 我们令节点 \(i\) 的答案为 \(dp_i\)
    • 首先根节点此时的 \(f_x\) 就是它的答案
    • 考虑父亲节点 \(fa\) 如何使用换根技术来计算 \(x\) 的答案
    • 首先 \(dp_{fa}\) 要减去 \(f_x\) 上传来的贡献

      • 令 \(w = f_x \cdot p_{x,fa}\) 则有 \(dp_{fa} = P_{fa} + w - (P_fa \cdot w)\)
      • 则 \(P_{fa} = \frac{dp_{fa}-w}{1-w}\) 须特判 \(w = 1\) 的情况
      • 然后按照子节点转移到父节点的方式同样的转移即可



来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册