比赛 20121030 评测结果 EAAAAAAAAA
题目名称 迷之阶梯 最终得分 90
用户昵称 Truth.Cirno 运行时间 0.199 s
代码语言 C++ 内存使用 39.07 MiB
提交时间 2012-10-30 21:46:51
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

int a[210],f[40010][210];
bool ava[41010][210];

int main(void)
{
	freopen("ladder.in","r",stdin);
	freopen("ladder.out","w",stdout);
	int i,j,k,n,c=0,ct=0;
	cin>>n;
	if (n==1)
	{
		cout<<"0\n";
		return(0);
	}
	for (i=1;i<=n;i++)
		cin>>a[i];
	f[0][1]=1;
	ava[0][1]=true;
	for (i=1;;i++)
	{
		ct=c;
		for (j=1;j<=n;j++)
		{
			for (k=1;k<j;k++)
			{
				if (ava[i-1][k])
				{
					if (a[j]-a[k]<=(1<<(f[i-1][k]-1)))
					{
						f[i][j]=1;
						if (!ava[i][j])
						{
							ava[i][j]=true;
							c++;
						}
					}
				}
			}
			if (ava[i-1][j+1])
			{
				f[i][j]=max(f[i][j],f[i-1][j+1]+1);
				if (!ava[i][j])
				{
					ava[i][j]=true;
					c++;
				}
			}
		}
		if (ava[i][n])
		{
			cout<<i<<endl;
			break;
		}
		if (c==ct)
		{
			cout<<"-1\n";
			break;
		}
	}
	return(0);
}