1.同时记录SSR和SR数量 O(n3m)
使用 dp[t][SSR][SR] 维护手中已经有 t 种SSR时的期望,后二维用于记录SSR和SR卡的数量,用于计算答案。
dp[0][0][0]=SSR=2∑NSR=0∑N−SSRdp[2][SSR][SR]×3pi
dp[0][0][SR]=∑{dp[0][0][SR−1]×qidp[0][0][SR]×(1−qi−pi)SRR
dp[1][SSR][SR]=∑⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧dp[0][SSR−1][SR]×pidp[1][SSR−1][SR]×3pidp[1][SSR][SR−1]×qidp[1][SSR][SR]×(1−qi−pi)新SSR已有SSRSRR
dp[2][SSR][SR]=∑⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧dp[1][SSR−1][SR]×32pidp[2][SSR−1][SR]×32pidp[2][SSR][SR−1]×qidp[2][SSR][SR]×(1−qi−pi)新SSR已有SSRSRR
2.仅记录SSR数量,同时维护SR贡献 O(n2m)
用 dp[t][SSR] 维护有 t 种SSR时的期望,同时用 dpSR[t][SSR] 维护SR卡对答案的贡献。
dp[0][0]=SSR=2∑Ndp[2][SSR]×3pi
dp[1][SSR]=∑⎩⎪⎪⎨⎪⎪⎧dp[0][SSR−1]×pidp[1][SSR−1]×3pidp[1][SSR]×(1−pi)新SSR已有SSRSR和R
dp[2][SSR]=∑⎩⎪⎪⎨⎪⎪⎧dp[1][SSR−1]×32pidp[2][SSR−1]×32pidp[2][SSR]×(1−pi)新SSR已有SSRSR和R
dpSR[t][SSR]=∑⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧dpSR[t−1][SSR−1]×3(3−t+1)pidpSR[t][SSR−1]×3t⋅pidp[t][SSR]×qidpSR[t][SSR]×(1−qi−pi)新SSR已有SSRSRR
3.不记录卡的数量,只维护贡献 O(nm)
不再记录SSR的数量,而是直接维护其对答案的贡献,每当SSR数量增加一,E((K+1)2)=E(K2)+E(2K)+E(1),所以要同时维护右边的三个期望。
用 dp[t] 维护有 t 种SSR时的期望,dpSR[t] 维护SR卡的贡献,对于SSR卡的贡献,用 dpSSR1[t] 维护 E(2K) 的期望,dpSSR2[t] 维护 E(K2) 的期望。
dp[0]=∑{dp[0]×(1−pi)dp[2]×3piSR和R新SSR
dp[1]=∑⎩⎪⎪⎨⎪⎪⎧dp[0]×pidp[1]×3pidp[1]×(1−pi)新SSR已有SSRSR和R
dp[2]=∑⎩⎪⎪⎨⎪⎪⎧dp[1]×32pidp[2]×32pidp[2]×(1−pi)新SSR已有SSRSR和R
dpSR[t]=∑⎩⎪⎪⎨⎪⎪⎧dpSR[t−1]×3(3−t+1)pidpSR[t]×(1−3t⋅pi)dp[t]×qi新SSR已有SSR和RSR
dpSRR1[t]=∑⎩⎪⎪⎨⎪⎪⎧(dpSRR1[t−1]+2dp[t−1])×3(3−t+1)pi(dpSRR1[t]+2dp[t])×3t⋅pidpSSR1[t]×(1−pi)新SSR已有SSRSR和R
dpSRR2[t]=∑⎩⎪⎪⎨⎪⎪⎧(dpSRR2[t−1]+dpSSR1[t−1]+dp[t−1])×3(3−t+1)pi(dpSRR2[t]+dpSSR1[t]+dp[t])×3t⋅pidpSSR2[t]×(1−pi)新SSR已有SSRSR和R
ans=∑{ans(dpSRR2[2]+dpSSR1[2]+dpSR[2]+dp[2])×3pi答案自身累加新SSR
4.利用矩阵乘法进行维护 O(n+m)
将上一步当中的状态转移改为矩阵形式,除去 dpSSR1[0],dpSSR2[0] 两个恒为0的状态,共有11个状态,成为秩为11的矩阵。
最终动态规划过程为 S×A1×A2×⋯×An×T,其中 S 为第一个元素为1其余为零的行向量,T 为最后一个元素为1其余为零的列向量,Ai 是根据转移方程和对应 pi,qi 得到的矩阵。因为矩阵乘法的结合律,只要先预处理出 SL[i],SR[i] ,表示从 S×A1×⋯×Ai 和 Ai×⋯×An×T 的向量,当询问更改第 t 次抽卡的概率,只要计算 SL[t−1]×At′×SR[t+1] 即可。
如果用直接用矩阵相乘,复杂度为 113 ,因为状态可以直接用向量表示,所以直接维护向量乘积。