A. Flipping Game(暴力求法)

题意:就是输入一串数,由0,1组成,在这一串数中,选择一个区间,把这个区间中的0变成1,1变成0。希望能让这一串数在改变后,得到的1最多并输出最后得到的1的个数。

题解:从第一个数开始遍历,找到0开头的序列,记住最大序列的长度,把不满足条件的数全部加起来。最后将最大序列部分和不改变部分相加,得出答案。

ACcode:

int main()
{
int n, a[110],sum,Max,t;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sum = 0; Max = -1; t = 0;
for (int i = 0; i < n; i++)
{
if (a[i] == 1)
{
sum--;
if (sum < 0)
sum = 0;
}//如果遇到的是1,就让它小于Max或等于0,满足求和的条件
else if(a[i]==0)
{
sum++;
if (sum > Max)
Max = sum;
}//如果遇到0,就计数,大于最大值,就成为最大序列
if (sum == 0 || sum < Max)
t+=a[i];//把没有改变的数都加起来
}
cout << t + Max << endl;//把两部分都加起来
return 0;
}

原文地址:https://www.cnblogs.com/Uiney117/p/14309489.html