题目描述 Description
现有n个数字a1,a2...an,其值均为0或1。
要求对着n个数中连续的若干个数进行一次取反(0->1,1->0),求所能得到的最多的1的数目。
输入描述 Input Description
第一行,n
第二行,n个数
输出描述 Output Description
能得到的最多的1的数目
样例输入 Sample Input
4
1 0 0 1
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
1 ≤ n ≤ 100
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[101]={0};
int n,i,j,k;
int Max=0,sum=0,s=0;
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d", &a[i]);
s+=a[i];
}
for(i=0;i<n;i++)//i为 左端点
{
if(a[i]==0)
{
for(j=i;j<n;j++)//j为右端点
{
sum=0;
if(a[j]==0)
for(k=i;k<=j;k++)
{
if(a[k]==0)
sum++;
if(a[k]==1)
sum--;
}
if(Max<=sum)
Max=sum;
}
}
}
if(Max==0)
Max--;
printf("%d\n",Max+s);
return 0;
}