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)output第2 - n + 1行:序列中的元素(1 <= a[i] <= 100000)
輸出a的不同子串行的數量mod 10^9 + 7。input示例
41232
題解: 動態規劃求解,以 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的不同子串行的數量。由於答案比...