因此当某个 $a_{i} = 1$ 时,将会有更优解。
于是最终的贪心方法为:将序列从每个 $1$ 的位置分开成若干段,每一段内的代价为 $\sum a_{i} \times a_{i+1} + \min a_i$,最后再加上中间 $1$ 的个数即可。
```cpp
const int N = 1e6 + 7;
int n, a[N];
ll ans = -1;
int main() {
rd(n), rda(a, n);
for (int i = 0, j = 1; i <= n; i = j, j = i + 1) {
while (j <= n && a[j] != 1) ++j;
++ans;
if (i + 1 != j) ans += *min_element(a + i + 1, a + j);
for (int k = i + 1; k < j - 1; k++)
ans += a[k] * a[k+1];
}
print(ans);
return 0;
}
```