luogu2679 子串 多維dp

2021-09-12 09:58:19 字數 1206 閱讀 7452

傳送門

有兩個僅包含小寫英文本母的字串 a 和 b 。

現在要從字串 a 中取出 k 個互不重疊的非空子串,然後把這 k 個子串按照其在字串 a **現的順序依次連線起來得到乙個新的字串。請問有多少種方案可以使得這個新串與字串 b 相等?

注意:子串取出的位置不同也認為是不同的方案。

第一行是三個正整數 n,m,k,分別表示字串 a 的長度,字串 b 的長度,以及問題描述中所提到的 k ,每兩個整數之間用乙個空格隔開。

第二行包含乙個長度為 n 的字串,表示字串 a 。

第三行包含乙個長度為 m 的字串,表示字串 b 。

乙個整數,表示所求方案數。

由於答案可能很大,所以這裡要求輸出答案對 1000000007 取模的結果。

輸入樣例#1:

6 3 1

aabaab

aab輸入樣例#2:

6 3 2

aabaab

aab輸入樣例#3:

6 3 3

aabaab

aab輸出樣例#1:

2輸出樣例#2:

7輸出樣例#3:

\(f[i][j][k]\) a第i個b第j個第k個子串的答案

\(g[i][j][k]\) a第i個b第j個第k個子串a[i]必選答案

//by menteur_hxy

#include#include#include#include#include#define f(i,a,b) for(register int i=(a);i<=(b);i++)

using namespace std;

const int mod=1000000007;

const int n=1010,m=210;

int n,m,k,fl;

int f[2][n][m],g[2][n][m];

char a[n],b[m];

int main()

printf("%d",f[n&1][m][k]);

return 0;

}

posted @

2018-08-01 17:19

menteur_hxy 閱讀(

...)

編輯收藏

題解 P2679 子串

傳送門 對於這道題,有好多大佬發了題解,狀態轉移方程也都一樣,但是那些大佬們都是只給個狀態轉移方程,以至於我這個蒟蒻很難搞懂什麼意思,所以發篇題解說下自己的理解 f i j k 0 qquad qquad qquad qquad qquad qquad qquad qquad qquad qquad...

洛谷 P2679子串

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

洛谷 P2679 子串

f i j p 0 1 表示b前j個字元由a的前i個字元分成p段,且a i 選或不選的方案數.1 當前a i 1 可以不選 f i 1 j 1 p 1 0 2 當前a i 與a i 1 在同一段上 f i 1 j 1 p 1 3 當前a i 與a i 1 不在同一段上 f i 1 j 1 p 1 1...