【题解】AT2022 [ARC059D] Unhappy Hacking

· · 题解

更好的阅读体验

Sol

考虑 dp。
dp_{i,j} 表示敲击了键盘 i 次,匹配了 j 个字符的方案数。
考虑如何转移。
分以下两种情况进行讨论。

边界 dp_{0,0}=1

Code

cin>>n>>st;
dp[0][0]=1;
for (int i=1;i<=n;i++)
    for (int j=0;j<=i;j++)
        dp[i][j]=(dp[i-1][max(j-1,0)]+dp[i-1][j+1]*2%mod)%mod;
cout<<dp[n][st.size()]<<endl;