傳送門
有兩個僅包含小寫英文本母的字串 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...