洛谷 P2679子串

2021-08-07 23:42:06 字數 2069 閱讀 4402

題目背景

無 題目描述

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

7 說明

對於第 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] 表示a串匹配到i b串匹配到j 用了k個子串

轉移的話 f[i][j][k]=f[i-1][j-1][k]+f[i-1][j-1][k-1]分別表示i是不是建立了乙個新的子串

當然這是我們會發現 這樣的狀態是預設了i用了 顯然i可以不用 也就是說這樣就遺漏了許多狀態

我們重新定義一下他 加一維01表示i用了沒用 f[i][j][k][0或1]

這樣轉移就要分開考慮01

f[i][j][k][0]=f[i-1][j][k][0]+f[i-1][j][k][1]因為i沒有用 所以不會有新串k不變 b串也不會更新匹配j不變

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

空間f陣列8kw左右,滾一維,滾完之後數組織有20w,效率之高啊!!!

%lrh大佬 大佬的:

#include

#include

#include

using namespace std;

#define mod 1000000007

#define maxn 205

int n,m,s,p,f[2][maxn][maxn][2];

char a[maxn*5],b[maxn];

#define which i&1

int main()

for(int j=1;j<=m;++j)

for(int k=1;k<=p;++k)

f[which^1][j][k][1]=f[which^1][j][k][0]=0;

}printf("%d\n",(f[n&1][m][p][0]+f[n&1][m][p][1])%mod);

return

0;}

洛谷 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...

題解 P2679 子串

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

洛谷P2679 NOIP2015 子串

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