小b有一个01序列,她每次可以翻转一个元素,即将该元素从0变1或者从1变0。
现在她希望序列不降,求最少翻转次数。
输入
第一行输入一个数n,其中1≤n≤20000;
第二行输入一个由‘0’和‘1’组成的字符串
输出
输出一个非负整数,表示翻转次数
输入样例
6
010110
输出样例
2
前面全为0 后面全为1
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
char s[20010];
int a[20010][2];
int n,sum=0x3f3f3f3f;
cin>>n>>s;
a[0][0]=a[0][1]=0;
for(int i=0;i<n;i++)
{
a[i+1][0]=a[i][0];
a[i+1][1]=a[i][1];
if(s[i]=='0') a[i+1][0]++;
else a[i+1][1]++;
}
for(int i=0;i<=n;i++)
{
sum=min(sum,a[i][1]+a[n][0]-a[i][0]);
}
cout<<sum;
return 0;
}