| 记录编号 | 47178 | 评测结果 | AAAAAAAAAA | 
    
        | 题目名称 | 1240.[NOIP 2010冲刺十三]迷之阶梯 | 最终得分 | 100 | 
    
        | 用户昵称 |  临轩听雨ゐ | 是否通过 | 通过 | 
    
        | 代码语言 | C++ | 运行时间 | 0.014 s | 
    
        | 提交时间 | 2012-10-31 08:56:32 | 内存使用 | 3.28 MiB | 
    
    
    
    		显示代码纯文本
		
		#include <fstream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
ifstream in("ladder.in");
ofstream out("ladder.out");
int main()
{
    int n;
    int tmp;
    int h[201]={0},f[201]={0};
    int t[32]={0};
    in>>n;
    t[0]=1;
    for(int i=1;i<=30;i++)
        t[i]=t[i-1]*2;
    for(int i=1;i<=n;i++)
        in>>h[i];
    for(int i=2;i<=n;i++)
    {
		f[i]=10000000;
        if(h[i]==h[i-1]+1)
            f[i]=f[i-1]+1;
        for(int j=1;j<=i-1;j++)
        {
            if(j>31) tmp=j-30;
            else tmp=1;
            for(int k=tmp;k<=j-1;k++)
                if((h[k]+t[j-k]>=h[i])&&(f[i]>f[j]+j-k+1))
                    f[i]=f[j]+j-k+1;
        }
    }
    if(f[n]<=10000000)  out<<f[n];
    else out<<-1;
    return 0;
}