题意:给你一个序列,问你有多少个子序列的元素和为偶数。
于每一位可以选择取或不取,对于奇数dp结果为上一位的奇数情况和偶数情况之和,对于偶数,则是偶数情况是偶数情况*2和奇数情况是上一位奇数情况*2,
int a[mxn];
LL dp[mxn][2];
int main(){
// freopen("in.txt","r",stdin);
freopen("azerah.in","r",stdin);
freopen("azerah.out","w",stdout);
int T;sf("%d",&T);
while(T--){
int n;sf("%d",&n);mem(dp,0);
rep(i,1,n){ sf("%d",&a[i]);a[i]=a[i]&1; }
if(a[1]%2)dp[1][1]=1;
else dp[1][0]=1;
for(int i=2;i<=n;++i){
if(a[i]){
dp[i][1]=(dp[i-1][1]+dp[i-1][0]+1)%mod;
dp[i][0]=(dp[i-1][1]+dp[i-1][0])%mod;
}
else{
dp[i][1]=(dp[i-1][1]*2)%mod;
dp[i][0]=(dp[i-1][0]*2+1)%mod;
}
}
pf("%d\n",dp[n][0]);
}
}