Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一個長度為nnn的串,包含a,b,c,?a,b,c,?a,b,c,?四種字符,其中???可以變成為a,b,ca,b,ca,b,c的任意一種,讓你求abcabcabc子序列出現的次數。
思路:
考慮如果有xxx個問號,那么當前這個串就被分成了3x3^x3x個串串。設dp[i][j]dp[i][j]dp[i][j]表示到了第iii位,狀態為jjj的串出現了多少次,j=0j=0j=0表示aaa,j=1j=1j=1表示ababab,j=2j=2j=2表示abcabcabc。先給出轉移方程:
當s[i]!=′?′s[i]!='?'s[i]!=′?′時:f[i][0]=f[i?1][0]+3cnti?1f[i][0]=f[i-1][0]+3^{cnt_{i-1}}f[i][0]=f[i?1][0]+3cnti?1?f[i][1]=f[i?1][1]+f[i?1][0]f[i][1]=f[i-1][1]+f[i-1][0]f[i][1]=f[i?1][1]+f[i?1][0]f[i][2]=f[i?1][2]+f[i?1][1]f[i][2]=f[i-1][2]+f[i-1][1]f[i][2]=f[i?1][2]+f[i?1][1]
當s[i]=′?′s[i]='?'s[i]=′?′時:f[i][0]=f[i?1][0]?3+3cnti?1f[i][0]=f[i-1][0]*3+3^{cnt_{i-1}}f[i][0]=f[i?1][0]?3+3cnti?1?f[i][1]=f[i?1][1]?3+f[i?1][0]f[i][1]=f[i-1][1]*3+f[i-1][0]f[i][1]=f[i?1][1]?3+f[i?1][0]f[i][2]=f[i?1][2]?3+f[i?1][1]f[i][2]=f[i-1][2]*3+f[i-1][1]f[i][2]=f[i?1][2]?3+f[i?1][1]
其中cnticnt_icnti?表示到了第iii位???出現的次數。
這里解釋一下,由于???會產生3cnti?13^{cnt_{i-1}}3cnti?1?個aaa,所以需要加上3cnti?13^{cnt_{i-1}}3cnti?1?個aaa。
在???處會分成三個部分,所以要乘上333。
總結
以上是生活随笔為你收集整理的Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路虎揽胜车主帮帮忙,79万买台柴油版二手
- 下一篇: Tumblr 宣布调整经营策略:进入“维