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的不同子串行...