题解:AT_arc137_b [ARC137B] Count 1's
看到题解区居然没有相同的做法有些惊讶,感觉我的思路更自然一些。
所有得分的情况等于最大得分减去最小得分再加一^1,其他题解说的很详细了这里不再赘述。
问题转化为求最大得分和最小得分。我们只讨论求最大得分,不失其一般性^2。
先统计全部的
核心代码
//为了代码简洁略去无关片段,只放了求最大值的部分。
int n,a[MAX];
void solve()
{
cin>>n;
fo(i,1,n)
cin>>a[i];
int sum=0,maxs=0;
fo(i,1,n)
sum+=a[i];
maxs=sum;
int i=1,j=1;
for(i=1;i<=n;)
{
int d=0;
for(j=i;j<=n;j++)
{
if(a[j]==0)
d++;
else
d--;
maxs=max(maxs,sum+d);
if(d<0)
break;
}
i=j+1;
}
}
AC 记录