《圣诞彩灯》哪里错了

#include<bits/stdc++.h>
using namespace std;
int n,a[105],cnt[2],pre[105],f[105][105][2];
void chkmin(int &x,int y){
	~y&&(x==-1||x>y)&&(x=y);
}
int main(){
	ios_base::sync_with_stdio(false);
	cin>>n;
	cnt[0]=n>>1;
	cnt[1]=n-cnt[0];
	for(int i=1,x;i<=n;++i){
		cin>>x;
		if(x){
			cnt[x&=1]-=1;
		}
		else{
			x=-1;
		}
		a[i]=x;
		pre[i]=pre[i-1]+(x==-1);
	}
	memset(f,-1,sizeof f);
	if(~a[1]){
		f[1][0][a[1]]=0;
	}
	else{
		if(cnt[0]) f[1][0][0]=0;
		if(cnt[1]) f[1][1][1]=0;
	}
	for(int i=1,x;i<n;++i){
		for(int j=0;j<=cnt[i];++j){
			for(int k=0;k<=1;++k){
				if(f[i][j][k]!=-1){
					x=a[i+1];
					if(x!=-1){
						chkmin(f[i+1][j][x],f[i][j][k]+(k^x));
					}
					else{
						if(j<cnt[1]){
							chkmin(f[i+1][j+1][1],f[i][j][k]+(k^1));
						}
						if(pre[i+1]-j<=cnt[0]){
							chkmin(f[i+1][j][0],f[i][j][k]+k);
						}
					}
				}
			}
		}
	}
	int res=-1;
	chkmin(res,f[n][cnt[1]][0]);
	chkmin(res,f[n][cnt[1]][1]);
	cout<<res;
	return 0;
}
2 个赞