51nod 1202 子串行個數(字串計數)

2021-08-07 17:17:40 字數 591 閱讀 1867

dp[i]代表是以i位的a[i]結尾,有多少種,(包括空集)

狀態轉移方程 1.如果a[i]之前沒有出現過dp[i]=2*dp[i-1]        前面i-1有dp[i-1]種可能,第i個數放或不放

2.如果a[i]之前出現過:dp[i]=2*dp[i-1]-dp[mark[a[i]]-1]   減去重複的部分,mark【i】是a[i]最近一次出現的位置.

最後減一,減去空集

#include #include const int mod=1e9+7;

int a[100005];

int mark[100005];

long long dp[100005];

int main()

memset(dp,0,sizeof(dp));

memset(mark,0,sizeof(mark));

dp[0]=1;

for(int i=1;i<=n;i++)

else

mark[a[i]]=i;

}printf("%i64d\n",dp[n]-1);}

return 0;

}

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的不同子串行的數量。由於答案比...

51Nod1202子串行個數

子串行的定義 對於乙個序列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的不同子串行的數量。由於答案比...

51Nod1202 子串行個數

子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1 p2 pm n。例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行...