Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你兩個(gè)串s,ts,ts,t,每次都可以從sss的開頭拿一個(gè)字符放到AAA串的開頭或結(jié)尾,問最終有多少種方案使得ttt是AAA的前綴,注意sss不必全部拿完。
m,n≤3000m,n\le3000m,n≤3000
思路:
分析一下題目的性質(zhì),每次都給一個(gè)串從前面或從后面加一個(gè)字符,相當(dāng)于從兩邊擴(kuò)展長(zhǎng)度,可以聯(lián)想到區(qū)間dpdpdp。
設(shè)f[l][r]f[l][r]f[l][r]表示用sss的前r?l+1r-l+1r?l+1個(gè)字符拼成ttt的[l,r][l,r][l,r]的方案數(shù),有一個(gè)很明顯的轉(zhuǎn)移方程:f[l][r]+=f[l+1][r](s[len]==t[l])f[l][r]+=f[l+1][r](s[len]==t[l])f[l][r]+=f[l+1][r](s[len]==t[l])f[l][r]+=f[l][r?1](s[len]==t[r])f[l][r]+=f[l][r-1](s[len]==t[r])f[l][r]+=f[l][r?1](s[len]==t[r])
直接這么寫是不對(duì)的,因?yàn)槲覀儼l(fā)現(xiàn)s,ts,ts,t的長(zhǎng)度不相等,也就是說如果len>mlen>mlen>m的話,有一部分放的時(shí)候是沒有要求的,具體來說:
(1)(1)(1)當(dāng)l>ml>ml>m的時(shí)候,它可以放在lll的位置,也可以放在rrr的位置。
(2)(2)(2)當(dāng)r>mr>mr>m的時(shí)候,它可以放在rrr的位置。
所以轉(zhuǎn)移的時(shí)候判斷一下這兩個(gè)條件就好啦。
初始的時(shí)候f[i][i]=2?(i>m∣∣s[1]==t[i])f[i][i]=2*(i>m||s[1]==t[i])f[i][i]=2?(i>m∣∣s[1]==t[i])。
最終答案為∑i=mnf[1][i]\sum_{i=m}^nf[1][i]∑i=mn?f[1][i]。
總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deltix Round, Spring
- 下一篇: P4198 楼房重建 线段树 + 区间合