翻转后1的数量
2024年11月27日小于 1 分钟
'''
dp[i][0] 表示没有进行翻转时1的最大数量,只能由dp[i-1][0]推导出来
dp[i][1] 表示当前位正在进行翻转,所以前一位可以翻转也可以不翻转;
故dp[i][1] = max(dp[i-1][0],dp[i-1][1]) + 当前位的数的翻转结果
dp[i][2] 表示到当前位已经翻转结束,所以前一位可能正在翻转或者已经翻转结束
但i==1时,不可能翻转结束。
'''
l = int(input())
s = [0] + list(map(int, input()[:]))
dp = [[0 for _ in range(3)] for _ in range(l+1)]
for i in range(1, l+1):
dp[i][0] = dp[i-1][0] + s[i]
dp[i][1] = max(dp[i-1][0], dp[i-1][1]) + (1-s[i])
if i > 1:
dp[i][2] = max(dp[i-1][1], dp[i-1][2]) + s[i]
print(max(dp[l][0], dp[l][1], dp[l][2]))