FZU2129 子串行總數 去重

2021-09-25 06:53:45 字數 667 閱讀 5533

例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比較大,輸出mod 10^9 + 7的結果即可。

input

第1行:乙個數n,表示序列的長度(1 <= n <= 100000)

第2 - n + 1行:序列中的元素(1 <= ai<= 100000)

output

輸出a的不同子串行的數量mod 10^9 + 7。

sample input41

232sample output

13

#includeusing namespace std;

const int maxn=1e5+5;

const int mod=1e9+7;

#define rep(i,a,n) for(int i=a;i<=n;i++)

int a[maxn],last[maxn],dp[maxn];//到i時子串行個數

int main()

else//i=4 當前掃瞄的最後位置 假如是新數用全部-當此數為出現的新數時重複出現1 2 不用+1 之前新數算過

last[a[i]]=i;

} cout

}

FZU 2129 子串行個數

給乙個序列,裡面可能有相同元素,問能組成多少不同子串行。dp。一直想用dp i 表示到序列a1 ai的答案,一直想不出來,其實有更好的做法。我們可以用dp i 表示最後乙個元素為ai的子串行有多少,sum i 表示dp 1 dp i 的和。狀態轉移見 include include include ...

FZU2129 子串行個數 DP

題目大意 求一串行的不相同的子串行的個數。分析 注意區分子序列和子串的區別 子串行可以不連續,子串必須連續。先說說本題吧。我們用dp i 來紀錄以 前i個字元組成的序列 的不同子串行的個數,很顯然,對於dp i 1 我們把第i 1個字元str i 1 分別加到前面已經有的子串行中,這樣就又多出了dp...

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