洛谷P2679 NOIP2015 子串

2021-08-07 09:52:46 字數 1223 閱讀 5225

有兩個僅包含小寫英文本母的字串 a 和 b。現在要從字串 a 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 a 中出現的順序依次連線起來得到一 個新的字串,請問有多少種方案可以使得這個新串與字串 b 相等?注意:子串取出 的位置不同也認為是不同的方案。

輸入格式:

輸入檔名為 substring.in。

第一行是三個正整數 n,m,k,分別表示字串 a 的長度,字串 b 的長度,以及問

題描述中所提到的 k,每兩個整數之間用乙個空格隔開。 第二行包含乙個長度為 n 的字串,表示字串 a。 第三行包含乙個長度為 m 的字串,表示字串 b。

輸出格式:

輸出檔名為 substring.out。 輸出共一行,包含乙個整數,表示所求方案數。由於答案可能很大,所以這裡要求[b]輸出答案對 1,000,000,007 取模的結果。[/b]

輸入樣例#1:

6 3 1 

aabaab

aab

輸出樣例#1:

2
輸入樣例#2:

6 3 2 

aabaab

aab

輸出樣例#2:

7
輸入樣例#3:

6 3 3 

aabaab

aab

輸出樣例#3:

對於第 1 組資料:1≤n≤500,1≤m≤50,k=1;

對於第 2 組至第 3 組資料:1≤n≤500,1≤m≤50,k=2; 對於第 4 組至第 5 組資料:1≤n≤500,1≤m≤50,k=m; 對於第 1 組至第 7 組資料:1≤n≤500,1≤m≤50,1≤k≤m; 對於第 1 組至第 9 組資料:1≤n≤1000,1≤m≤100,1≤k≤m; 對於所有 10 組資料:1≤n≤1000,1≤m≤200,1≤k≤m。

【題解】直接上方程

f[i][j][k][0]=f[i-1][j][k][0]+f[i-1][j][k][1]

f[i][j][k][1]=f[i-1][j-1][k-1][0]+f[i-1][j-1][k-1][1]+f[i-1][j-1][k][1]

f[i][j][k][0/1]表示字串1第i位和字串2第j位能否作為第k個匹配

滾動陣列優化一下即可

P2679 NOIP2015 提高組 子串

給出字串a和b,在a中取 k 個不重疊的子串,按原來的順序排列後與b相同,求方案數 dp設 f i j p 為a字串匹配到 i b字串匹配到 j 時,取 p 個子串且 a i 為最後一位匹配成功的方案數,很好轉移 為了求答案,我們需要 f 關於 i 的字首和,定義為 g 有 f i j p sum ...

NOIP2015子串(洛谷2679)

標籤 dp 題目描述 有兩個僅包含小寫英文本母的字串 a 和 b。現在要從字串 a 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 a中出現的順序依次連線起來得到一 個新的字串,請問有多少種方案可以使得這個新串與字串 b 相等?注意 子串取出的位置不同也認為是不同的方案。輸入輸出...

洛谷 2679 NOIP 2015 子串

題目戳這裡 一句話題意 給你兩個字串a,b從a中取出k個不重合子串 順序與在a中順序相同 組成b,問有多少種方案?solution 話說重打還是出各種錯誤也是醉了 先看題目,因為答案與a串,b串和拆分次數都有關,那麼我們把這些都定義進dp方程中 定義f i j k 0 代表選到a串的前i個字元中選k...