= - =又是一个新东西,不合法的可以直接转移...dp还是简单
#include <bits/stdc++.h> using namespace std; const int N=105; int a[N]; int f[N][N][2];//到了第i个没填j个偶数数这个点填奇数/偶数 int main() { int n,ans=0; cin>>n; memset(f,0x3f,sizeof f); for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(a[1]==0||a[1]%2==1) f[1][n/2][0]=0;//填奇数 if(a[1]==0||a[1]%2==0) f[1][n/2-1][1]=0;//填偶数 for(int i=2;i<=n;i++)//到了i的位子 { for(int j=0;j<=n/2;j++)//还有j个偶数没分配 { if(a[i]==0||a[i]%2==1)//填奇数 { f[i][j][0]=min(f[i][j][0],min(f[i-1][j][1]+1,f[i-1][j][0])); } if(a[i]==0||a[i]%2==0)//填偶数 { f[i][j-1][1]=min(f[i][j-1][1],min(f[i-1][j][1],f[i-1][j][0]+1)); } } } cout<<min(f[n][0][1],f[n][0][0])<<endl; return 0; }