比赛 20121030 评测结果 AAAAAAAAAA
题目名称 迷之阶梯 最终得分 100
用户昵称 日光。 运行时间 0.024 s
代码语言 C++ 内存使用 1.96 MiB
提交时间 2012-10-30 21:59:43
显示代码纯文本
#include<cstdio>
using namespace std;
const int max=205,inf=0xfffffff;
int n,k1;
int h[206],dp[206];
int t[33];
bool flag;
int main()
{
	freopen("ladder.in","r",stdin);
	freopen("ladder.out","w",stdout);
	flag=true;
	scanf("%d",&n);
	t[0]=1;
	for(int i=1;i<=30;i++)
	{
		t[i]=t[i-1]<<1;
	}
	for(int i=1;i<=n;i++) scanf("%d",&h[i]);
	for(int i=2;i<=n;i++)
	{
		if(flag)
		{
			dp[i]=inf;
			if(h[i]==h[i-1]+1) dp[i]=dp[i-1]+1;
			for(int j=1;j<i;j++)
			{
				if(j-30>i) k1=j-30;
				else k1=1;
				for(int k=k1;k<j;k++)
				{
					if((h[k]+t[j-k]>=h[i])&&(dp[i]>dp[j]+j-k+1)) dp[i]=dp[j]+j-k+1;
				}
			}
			if(dp[i]==inf) flag=false;
		}
	}
	if(flag) printf("%d",dp[n]);
	else printf("-1");
	return 0;
}