fzu Problem 2129 子串行個數

2021-06-23 06:17:34 字數 971 閱讀 6671

accept: 107    submit: 334

time limit: 2000 msec    memory limit : 32768 kb

problem description

子串行的定義:對於乙個序列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 1000000007)

input

輸入包含多組資料。每組資料第一行為乙個整數n(1<=n<=1,000,000),表示序列元素的個數。

第二行包含n個整數a[i] (0<=a[i]<=1,000,000)表示序列中每個元素。

output

輸出乙個整數佔一行,為所求的不同子串行的個數。由於答案比較大,請將答案mod 1000000007。

sample input

1 2 3 2

sample output

hint

其中40%資料點1<=n<=1000。

source

福州大學第十屆程式設計競賽

先找出規律,b[i]=b[i-1]*2+1;然後減去重複的,重複的個數等於,前乙個當前數的前乙個數的b值。

自己搞出來的,不容易呀。。。

#include#include#define mod 1000000007

#define n 1000005

long long ans[n],a[n],b[n],mark[n];

int main()

else

mark[a[i]]=1;

ans[a[i]]=b[i-1];

}printf("%i64d\n",b[n]%mod);

}}

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