链接:
https://codeforces.com/problemset/problem/327/A
题意
有一个长度为n的数组,里面全都由0和1组成,可以在一个区间[i, j]里翻转数组,即把该区间内的数组元素0和1互换,求一次翻转能获得数组的最大和是多少?
输入n, a0, a1, a2, …
0 <= i <= j <= n <= 100
Example
input
5
1 0 0 1 0
output
4
input
4
1 0 0 1
output
4
解析
这题范围只到100,直接用O(n^3)暴力循环即可暴力得到答案,两重循环用来确定[i, j]区间范围,再来一重循环来记录翻转,然后不断比较从而选出最大和。
#include <iostream>
using namespace std;
const int N = 110;
int a[N];
int main()
{
int n;
cin >> n;
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
sum += a[i];//先把原先数组的和求出
}
int ans = 0;
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
int t = sum;//用原先数组和开始
for (int w = i; w <= j; w++)
{
if (a[w] == 0) t++;//翻转区间里0变成1,1变成0,所以碰到0就+1,反之-1
else t--;
}
if (t > ans) ans = t;//比较出最大的和
}
}
cout << ans;
return 0;
}