代码如下
#include<bits/stdc++.h>
using namespace std;
int n;
long long h[100001];
long long f[100001];
int main()
{
cin>>n;
int i,j,k;
for(i=1;i<=n;i++)cin>>h[i];
memset(f,0x3f,sizeof(f));
f[1]=0;
long long pd=f[0];
for(i=2;i<=n;i++)
{
if(h[i-1]+1>=h[i]) f[i]=f[i-1]+1;
for(j=i-1;j>=1;j--)
for(k=j-1;k>=1;k--)
if(h[i]<=(1<<(j-k))+h[k])
{
f[i]=min(f[i],f[j]+j-k+1);
}
}
if(f[n]!=pd)
cout<<f[n];
else cout<<-1;
}
以上代码90分,第一个测试点没过,请求找错