Home > Web Front-end > HTML Tutorial > Codeforces Round #191 (Div. 2)-A. Flipping Game_html/css_WEB-ITnose

Codeforces Round #191 (Div. 2)-A. Flipping Game_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:55:09
Original
1832 people have browsed it

Flipping Game

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Iahub got bored, so he invented a game to be played on paper.

He writes n integers a1,?a2,?...,?an. Each of those integers can be either 0 or 1. He's allowed to do exactly one move: he chooses two indices i and j (1?≤?i?≤?j?≤?n) and flips all values ak for which their positions are in range [i,?j] (that is i?≤?k?≤?j). Flip the value of xmeans to apply operation x?=?1 - x.

The goal of the game is that after exactly one move to obtain the maximum number of ones. Write a program to solve the little game of Iahub.

Input

The first line of the input contains an integer n (1?≤?n?≤?100). In the second line of the input there are n integers: a1,?a2,?...,?an. It is guaranteed that each of those n values is either 0 or 1.

Output

Print an integer ? the maximal number of 1s that can be obtained after exactly one move.

Sample test(s)

input

51 0 0 1 0
Copy after login

output

input

41 0 0 1
Copy after login

output

Note

In the first case, flip the segment from 2 to 5 (i?=?2,?j?=?5). That flip changes the sequence, it becomes: [1 1 1 0 1]. So, it contains four ones. There is no way to make the whole sequence equal to [1 1 1 1 1].

In the second case, flipping only the second and the third element (i?=?2,?j?=?3) will turn all numbers into 1.







解题思路:题意是讲有一个0,1序列,现允许你对任意一个子序列取反,问操作后得到的序列,最多能有多少个1。

数据不大,直接暴力。直接两层循环枚举取反序列的起点和终点,统计每种情况下1的个数,保存一个最大值即可。






AC代码:

#include <iostream>#include <cstdio>using namespace std;int a[105];int main(){//  freopen("in.txt","r",stdin);    int n;    while(cin>>n){        for(int i =0; i<n; i++)            cin>>a[i];        int ans = 0;        for(int i=0; i<n; i++){            for(int j=i; j<n; j++){                int sum = 0;                for(int k=0; k<n; k++){                    if(k>=i && k<=j) sum += a[k]^1;          //用异或^取反                    else sum += a[k];                }                if(ans < sum)  ans = sum;            }        }        cout<<ans<<endl;    }    return 0;}
Copy after login


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template