codeforces Flipping Game

题意:
给出一个数组 由0 和 1组成。任意翻转一个子段 x = 1-x;即0变1 1变0;

思路:
1

统计1的总数,再去遍历去找出一段 翻转后 1最多的一段。

#include
#define ll long long
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
	int n, a[105], res = 0;
	cin >> n;
	for(int i=0; i<n; i++){
		cin >> a[i];
		if(a[i]) res++; //统计1的个数 
	}
	int t = -1;
	for(int i=0; i<n; i++){
		int num_0 = 0, num_1 = 0;
		for(int j=i; j<n; j++){
			if(a[j]==1) num_1++;  
			if(a[j]==0) num_0++;
			t = max(t, num_0-num_1);//求0-1最多的一段即将现在的0编变成1的最大数
			// 然后再加上原来1的个数就是答案 
		}
	}
	cout << res+t <<endl;
    return 0;
}

你可能感兴趣的:(codeforces Flipping Game)