FZU Problem 2129 子序列个数

时间:2023-03-09 13:20:23
FZU   Problem 2129 子序列个数

看了 dp 方程之后应该是妙懂

每次 加入一个数,×2  然后剪掉重复的; 重复的个数 维前面那个数,,,,,

 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mod 1000000007
using namespace std; long long dp[],pre[];
int main( )
{
int N;
while( scanf("%d",&N) != EOF )
{
memset( pre,,sizeof( pre) );
memset( dp,,sizeof(dp) );
int now; scanf("%d",&now); dp[] = ; pre[now] = ;
for( int i = ; i <= N; i++ )
{
int now; scanf("%d",&now);
dp[i] = (((dp[i-]*)%mod) - dp[pre[now]-]);
if( !pre[now] )dp[i] += ;
pre[now] = i;
dp[i] += mod;
dp[i] %= mod;
}
printf("%lld\n",dp[N]);
}
return ;
}