子串行個數 動態規劃

2021-10-21 14:16:52 字數 841 閱讀 2342

題目:統計乙個字串中全部不同的子串行的個數

思路:動態規劃求解

令 f[i] = 前 i 個元素中包含的全部子串行的個數

那麼狀態轉移方程分為下面兩種情況:

當第 i 個元素在前面 i - 1 個字元中沒有出現時, f[i] = f[i - 1] + f[i - 1] + 1。可以看出 f[i] 分為了三個部分,其中第乙個 f[i - 1] 表示前面 i - 1 長度的字串包含的子串行個數,第二個 f[i - 1] 表示在前面 i - 1 長度的字串後面新增第 i 個字元,第三個 1 表示第 i 個字元單獨構成乙個字序列。

當第 i 個元素在之前出現過時,f[i] = f[i - 1] + f[i - 1] - f[i 元素最後一次出現的位置 - 1],第乙個 f[i - 1] 時前面 i - 1 長度的字串包含的子串行個數,第二個 f[i - 1] 表示在前面 i - 1 長度的字串的所有子串行後面新增第 i 個字元,然而這種情況會出現重複,比如 2 3 1 4 3,(2 3)這個子串行出現了兩次,那麼需要 i 元素頂替上乙個相同元素出現在子串行時的重複情況,這部分需要減去。

**:

#include

using

namespace std;

#define mod 1000000007

#define maxn 1000005

typedef

long

long ll;

int last[maxn]

;ll dp[maxn]

;int

main()

cout << dp[n]

% mod<< endl;

}

動態規劃 回文子串行個數

description 給定乙個字串行,求這個序列中回文子串行的個數。包含多組用例,每個用例為一行字串行 只含有字母和數字,不包含空格,字串長度小於100 輸出該字串行中回文子串行的個數。aaaa aaba 15 10 對於樣例2,有如下回文子串行 為便於觀察,我們另字串行為a1 a2 b a3 a...

FZU 2129 子串行個數 動態規劃

題意 子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,請輸出不同的子串行的個數。由於答案比較大,請將答案mod 1000000...

動態規劃 公共子串行

公共子串行 總時間限制 1000ms 記憶體限制 65536kb 描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在 嚴格上公升 的序列 i1,i2,ik 使得對j 1,2,k,有xij zj。比如z a,b,f,c 是x a,b,c,f,b,c 的子串行。現在給...