记录编号 |
47178 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[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;
}