2019 GUDT WPTC 3 Div.2 Problem F(题解)

原题

题目大意

题目背景是有一串数字,只包含1和0,你可以进行一次操作,即选一个区间,然后把这段区间里的1变成0,0变成1.题目要求在你完成一次操作后1的个数最大,并输出1的个数.

题目分析

首先看到这道题, 第一想法是找出这个最优区间,但是会发现这个最优区间很难找,再看看题目给出的数据大小,数字个数n最多只有100,便可暴力解决,即翻转每一个子区间,同时更新1个数的最大值.

代码

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <string>
 8 #include <utility>
 9 #include <queue>
10 #include <stack>
11 const int INF=0x3f3f3f3f;
12 using namespace std;
13 
14 int main()
15 {
16     int a[100];
17     int ans=0,n;
18     cin>>n;
19     for(int i=0;i<n;i++)
20     {
21     cin>>a[i];
22     if(a[i]==1) ans++; //在输入数据时顺便统计初始数据1的个数
23     }
24     int max=0,temp=ans; //max用来记录所有方案1的个数的最大值,temp用来记录每个方案的1的个数
25     for(int i=0;i<n;i++)
26     {
27     for(int j=i;j<n;j++)
28     {
29         if(a[j]==1) temp--;
30         else temp++;
31         if(max<temp) max=temp;
32     }
33     temp=ans;
34     }
35 
36     cout<<max<<endl;
37 
38     return 0;
39 }

猜你喜欢

转载自www.cnblogs.com/VBEL/p/10403604.html
今日推荐