戳我看题
#include <bits/stdc++.h>
using namespace std;
int a[1001], dp[1001];
int find(int p) {
for (int i = p - 2; i >= 1; i--)
if (a[i] + (1 << (p - i - 1)) >= a[p])
return p - i - 1;
return 0;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 2; i <= n; i++) {
if (a[i] - a[i - 1] <= 1)
dp[i] = dp[i - 1] + 1;
else if (find(i))
dp[i] = dp[i - 1] + find(i) + 1;
else {
printf("-1\n");
return 0;
}
}
printf("%d\n", dp[n]);
return 0;
}