= - =又是一个新东西,不合法的可以直接转移...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;
}
京公网安备 11010502036488号