zoukankan      html  css  js  c++  java
  • Codeforces 327A-Flipping Game(暴力枚举)

    A. 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
    5
    1 0 0 1 0
    
    output
    4
    
    input
    4
    1 0 0 1
    
    output
    4
    题意:翻牌游戏。

    给出n张牌,每张牌仅仅有0和1两种状态。给出初始状态。对于翻牌操作这样规定:每次操作可将区间[i,j](1=<i<=j<=n)内牌的状态翻转(即0变1,1变0)。求一次翻转操作后,1的个数尽量多。

    枚举区间+遍历区间推断,O(n^3);
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cctype>
    #include <cstdlib>
    #include <set>
    #include <map>
    #include <vector>
    #include <string>
    #include <queue>
    #include <stack>
    #include <cmath>
    using namespace std;
    const int INF=0x3f3f3f3f;
    #define LL long long
    int a[110];
    int main()
    {
    	int n,num[2];
    	while(~scanf("%d",&n))
    	{
    		int ans=0;
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d",a+i);
    		    if(a[i]==1)
    				ans++;
    		}
    		int pos=ans;
    		if(pos==n)
    		{
    			printf("%d
    ",n-1);
    			continue;
    		}
    		for(int i=0;i<n;i++)
    			for(int j=i;j<n;j++)
    			{
    			   memset(num,0,sizeof(num));
    			   for(int k=i;k<=j;k++)
    					num[a[k]]++;
    				if(num[0]>num[1])
    					ans=max(ans,pos+num[0]-num[1]);
    			}
    			printf("%d
    ",ans);
    	}
    	return 0;
    }
  • 相关阅读:
    mybatis的延时加载缓存机制
    mybatis03
    事务
    codeforces-200B
    codeforces-339B
    codeforces-492B
    codeforces-266B
    codeforces-110A
    codeforces-887B
    codeforces-69A
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6991100.html
Copyright © 2011-2022 走看看