比赛 20121030 评测结果 AAAAAAAAAA
题目名称 迷之阶梯 最终得分 100
用户昵称 TBK 运行时间 0.056 s
代码语言 C++ 内存使用 2.83 MiB
提交时间 2012-10-30 21:54:47
显示代码纯文本
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <set>
#include <queue>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
long long a[200],b,c,d,f[201],l,m,n;
int main(void)
{
    freopen("ladder.in","r",stdin);
    freopen("ladder.out","w",stdout);
    scanf("%d",&b);
    for (c=0;c<b;c++) scanf("%d",&a[c]);
    for (c=1;c<b;c++)
    {
		l=(long long)pow(2.0,(double)(c-1));
        if (a[0]+l>MAXN) break;
        if (a[c]>a[0]+l) 
        {
            printf("-1");
            return 0;
        }
    }
	for (c=1;c<b;c++) f[c]=MAXN;
    for (c=1;c<b;c++)
        for (d=0;d<c;d++)
		{
			l=(long long)pow(2.0,(double)d);
			for (m=0;m<c-d;m++)
				if (a[m]+l>=a[c]) f[c]=f[c]<f[m+d]+d+1?f[c]:f[m+d]+d+1;
		}
    printf("%d",f[b-1]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}