1202 子串行個數

2021-07-13 10:15:20 字數 1104 閱讀 5306

1202 子串行個數

子串行的定義:對於乙個序列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,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比較大,輸出mod 10^9 + 7的結果即可。

input

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

第2 - n + 1行:序列中的元素(1 <= a[i] <= 100000)

output

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

412

32

題解: 動態規劃求解,以 dp[i] 表示以a[i] 結尾的子串行的個數,存在相同子串行的前提是 [1~j < i) 中存在 a[j] = a[i];如果存在,則我們只需要考慮 [j ~ i) 這段區間的轉移就行 因為[1~j)這段

區間的轉移已經由a[j]算出來了. 注意a[j]是離a[i]最近的乙個. 這個體現了動態規劃的最優子結構.

ac**:

#!/usr/bin/python3

#coding=utf-8

__metaclass__ = type

__author__ = 'xdlove'

n = int(input())

mod = int(1e9) + 7

sum = [0 for x in range(n + 1)]

mp = [0 for x in range(n + 1)]

for i in range(1,n + 1):

x = int(input())

tp = mp[x] - 1 if mp[x] else 0

sum[i] += 0 if mp[x] else 1

mp[x] = i

sum[i] += 2 * sum[i - 1] - sum[tp]

sum[i] %= mod

print(sum[n])

1202 子串行個數 dp

子串行的定義 對於乙個序列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,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比...

1202 子串行個數 DP

1202 子串行個數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 子串行的定義 對於乙個序列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...

51nod 1202 子串行個數

子串行的定義 對於乙個序列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,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比...