记录编号 106464 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺十三]迷之阶梯 最终得分 100
用户昵称 Gravatarztx 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2014-06-14 15:42:32 内存使用 0.29 MiB
显示代码纯文本
#include <cstdio>

#define  sig 107e7

int n,h[201],f[201] ;

int main()
{
	freopen("ladder.in" ,"r",stdin ) ;
	freopen("ladder.out","w",stdout) ;
	scanf("%d",&n) ;
	if (n == 1)
	{
		printf("0\n") ;
		return 0 ;
	}
	for (int i = 0 ; i < n ; i ++ )
	{
		scanf("%d", &h[i]) ;
		f[i] = sig ;
	}
	f[0] = 0 ;
	for (int i = 1 ; i < n ; i ++ )
	{
		for (int j = i-1 ; j >= 0 ; j -- )
		{
			if (j == i-1 && h[j] == h[i]-1 ) f[i] = f[j]+1 ;
			else
			{
				int t = 1 , step = -1 ;
				while (step ++ , t < h[i] - h[j]) t *= 2 ;
				if (step < i-j && f[i] > f[j+step]+step+1) f[i] = f[j+step]+step+1 ;
			}
		}
		if (f[i] == sig)
		{
			printf("-1\n") ;
			return 0 ;
		}
	}
	printf("%d",f[n-1]) ;
	//return 0 ;
}