dp[i]表示到第i个台阶的最优方案;
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
long long n,temp;
long long dp[N] , h[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i=1 ; i<=n ; i++) cin >> h[i];
for(int i=2 ; i<=n ; i++) dp[i] = 2e18;
for(int i=2 ; i<=n ; i++) {
if(h[i] == h[i-1]+1) dp[i] = dp[i-1] + 1;
for(int j=i-1 ; j>=1 ; j--) {
for(int p=j+1 ; p<=n ; p++) {
temp = pow(2,i-j);
if(h[p] <= h[j] + temp) dp[p] = min(dp[p] , dp[i] + i - j + 1);
}
}
}
if(dp[n] >= 2e18) cout << -1 << endl;
else cout << dp[n] << endl;
return 0;
}