传送门
题意:
思路:
d
p
[
n
]
[
0
]
dp[n][0]
dp[n][0]代码把前n个数全变成0需要的最小翻转次数
d
p
[
n
]
[
1
]
dp[n][1]
dp[n][1]代码把前n个数全变成1需要的最小翻转次数
转移方程看代码,很好理解
代码:
int a[MAXN];
int dp[MAXN][2];
int main()
{
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n;
cin>>n;
rep(i,1,n){
cin>>a[i];
}
for(int i=1;i<=n;i++){
if(a[i]==1){
dp[i][0]=min(dp[i-1][0]+1,dp[i-1][1]+1);
dp[i][1]=min(dp[i-1][0]+1,dp[i-1][1]);
}else {
dp[i][0]=min(dp[i-1][0],dp[i-1][1]+1);
dp[i][1]=min(dp[i-1][0]+1,dp[i-1][1]+1);
}
}
cout<<min(dp[n][0],dp[n][1]+1)<<endl;
return 0;
}