显示代码纯文本
		
		#include <cstdlib>
#include <cstring>
#include <cstdio>
#define MAX 200
unsigned long long int height[MAX]; 
int n; 
int f[MAX]; 
unsigned long long int sqr[33] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296}; 
int fmin(int a, int b) {
    return a < b ? a : b; 
}
int main() {
    FILE *fin = fopen("ladder.in", "r"); 
    FILE *fout = fopen("ladder.out", "w"); 
    memset(f, 0x7F, sizeof(f)); 
    fscanf(fin, "%d", &n); 
    for(int i = 0; i < n; i++) {
        fscanf(fin, "%lld", &height[i]); 
    }
    f[0] = 0; 
    for(int i = 1; i < n; i++) {
        if(height[i] - 1 == height[i - 1]) {
            // height + 1
            f[i] = fmin(f[i], f[i-1] + 1); 
        }
        for(int j = 0; j < i; j++) {
            for(int k = j + 1; k < i; k++) {
                if(height[j] + sqr[k - j] >= height[i]) {
                    f[i] = fmin(f[i], f[k] + (k - j) + 1); 
                }
            }
        }
    }
    if(f[n-1] == 0x7F7F7F7F) {
        fprintf(fout, "-1\n"); 
        return 0; 
    }
    fprintf(fout, "%d", f[n-1]); 
    return 0; 
}