🔖 acm动态规划解题报告

题意简述

  • 一个长度为 L 的串 a0a1ar1ar+1ar+2aL1 表示算式:A×B。其中:

    A=i=0r1(ai×10ri1)B=i=r+1L1(ai×10Li1)0r<L,0ai9,0i<Lir
    (1)f(S)=f(a0a1ar1ar+1ar+2aL1)(2)=A×B={[i=0r1(ai×10ri1)]×[i=r+1L1(ai×10Li1)],0<r<L10,r=0 或 r=L1
  • 交换操作:从 S 中任选两个字符(可以选择 * 号),交换它们的位置

K 次交换后,f(S) 的期望值为 E;求 (E×(L2)K)mod(109+7)

数据范围:1L,K50

题目简析

为了计算期望,可以先求出所有的可能。对于一个长度为 N 的串 s,记它所代表的算式的的计算结果为 φ(s)。因为每交换一次后会得到多个可能的串,我们用 Γ(k,p) 表示执行 k 此交换后,所有乘号在位置 p 处的串构成的可重集合。所以我们想要的答案就是 p=1NsΓ(K,p)φ(s).

f(k,p,a,b)=sΓ(K,p)sa×sb。注意到,

φ(s)=(a=1p1sa×10pa1)×(b=p+1Nsb×10Nb)=a=1p1b=p+1Nsa×sb×10pa1+Nb

所以,

p=1NsΓ(K,p)φ(s)=p=1Na=1p1b=p+1Nf(K,p,a,b)×10pa1+Nb

紧接着,考虑 f(k,p,a,b) 如何进行状态转移:

#abp
1
2不动
3不动
4不动不动
5不动
6不动不动
7不动不动
8不动不动不动


我们逐一进行考虑,则所有情况的和就是 f(k+1,p,a,b).

  1. 显然不可行,故贡献为: 0

  2. a 上的字符和 b 上的字符交换,贡献为: f(k,p,b,a)

  3. a 上的字符和 p 上的字符交换,贡献为: f(k,a,p,b)

  4. a 上的字符和剩下的 N3 个字符中的任一字符交换,贡献为: 1iN,ia,ipf(k,p,i,b)

  5. b 上的字符和 p 上的字符交换,贡献为: f(k,b,a,p)

  6. b 上的字符和剩下的 N3 个字符中的任一字符交换,贡献为: 1iN,ia,ipf(k,p,a,i)

  7. p 上的字符和剩下的 N3 个字符中的任一字符交换,贡献为: 1iN,ia,ipf(k,i,a,b)

  8. 即剩下的 N3 个字符中的任选两个字符交换,贡献为: (2N3)f(k,p,a,b)

对于 467 利用前缀和,可以在 O(1) 的时间内计算出来。故算法的总时间复杂度为 O(n3).

小记

最后一个小时一直和 ZPH 学长讨论这一道题,当时实在是太弱,以至于这样的数据范围竟然想着推数学公式。。。ORZ。。


题解是赛后一周写的,所以是 pdf 格式。 Markdown 中,两侧下划线表示斜体,所以书写数学公式时下划线要用 '' 转义

© 2017-2025 光和尘有花满渚、有酒盈瓯

Comments