返回题解分享
讨论 / 题解分享/ 帖子详情

数组分割(编程题) - 题解

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
const int mod=1000000007;
int a[N],dp[N][N];
int main(){
	int t;
	cin >> t;
	while(t--){
		int n;cin >> n;
		long long sum=0;
		for(int i =1;i<=n;i++){
			cin >> a[i];
			sum+=a[i];
		}
		if(sum%2==1){
			cout << 0<<endl;
			continue;
		}
		memset(dp,0,sizeof(dp));
		dp[0][0]=1;
		dp[0][1]=0;
		for(int i =1;i<=n;i++){
			if(a[i]%2==0){
				dp[i][0]+=dp[i-1][0]*2%mod;
				dp[i][1]+=dp[i-1][1]*2%mod;
			}
			else{
				dp[i][1]+=dp[i-1][0]+dp[i-1][1];
				dp[i][0]+=dp[i-1][1]+dp[i-1][0];
			}
			dp[i][0]%=mod;
			dp[i][1]%=mod;
		}
		cout << dp[n][0] <<endl;
	}
	return 0;
}
0 回复 0 转发 1 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!