题目描述

在经过地球防卫小队的数学家连续多日的工作后,外星人发的密码终于得以破解。它 告诉我们在地球某一处的古老遗迹中,存在有对抗这次灾难的秘密武器。防卫小队立即赶 到这处遗迹。要进入遗迹,需要通过一段迷之阶梯。登上阶梯必须要按照它要求的方法, 否则就无法登上阶梯。它要求的方法有以下三个限制:

  1. 如果下一步阶梯的高度只比当前阶梯高 1,则可以直接登上。

  2. 除了第一步阶梯外,都可以从当前阶梯退到前一步阶梯。

  3. 当你连续退下 k 后,你可以一次跳上不超过当前阶梯高度 2^{k}2k 的阶梯。比如说你现 在位于第 j 步阶梯,并且是从第 j+k 步阶梯退下来的,那么你可以跳到高度不超过当前阶 梯高度+2^{k}2k 的任何一步阶梯。跳跃这一次只算一次移动。

开始时我们在第一步阶梯,由于时间紧迫,我们需要用最少的移动次数登上迷之阶梯。 请你计算出最少的移动步数。

输入输出格式

输入格式:

第一行:一个整数 N,表示阶梯步数。

第二行:N 个整数,依次为每层阶梯的高度,保证递增。

输出格式:

第一行:一个整数,如果能登上阶梯,输出最小步数,否则输出-1。

输入输出样例

输入样例#1: 复制

5
0 1 2 3 6
输出样例#1: 复制

7

说明

【样例解释】

连续登 3 步,再后退 3 步,然后直接跳上去。

【数据范围】

对于 50%的数据:1≤N≤20。

对于 100%的数据:1≤N≤200。

对于 100%的数据:每步阶梯高度不超过 2^31-1

/*让dp[i]为跳到i的最小步数。
1、sta[i]==sta[i-1]+1 --> dp[i]=dp[i-1]+1
2、dp[i]=min(dp[i],dp[j + k]+k+1) 其中k=log2(sta[i]-sta[j]),表示从i到j要退几步。*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; int n,ans=;
int sta[],dp[]; inline int read(int &num)
{
num=;
char c=getchar();
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar()){num=num*+c-'';}
} int main()
{
memset(dp,0x3f,sizeof(dp));
read(n);
for(int i=;i<=n;i++)
{
read(sta[i]);
}
dp[]=; //跳第一个台阶需要0步
for(int i=;i<=n;i++)
{
if(sta[i]==sta[i-]+) dp[i]=dp[i-]+;
for(int j=;j<i;j++)
{
int k=ceil(log2(sta[i]-sta[j])); //计算从i要退几步才到点j,即计算2^k中的k的值
if(j+k<=i)
{
dp[i]=min(dp[i],dp[j+k]+k+); //从j+k退到j需要k步,再跳到i还需要1步
}
}
}
if(dp[n]<0x3f3f3f3f) printf("%d",dp[n]); //能跳到
else printf("-1"); //跳不到
return ;
}

P1929 迷之阶梯的更多相关文章

  1. 洛谷P1929 迷之阶梯

    P1929 迷之阶梯 题目描述 在经过地球防卫小队的数学家连续多日的工作后,外星人发的密码终于得以破解.它 告诉我们在地球某一处的古老遗迹中,存在有对抗这次灾难的秘密武器.防卫小队立即赶 到这处遗迹. ...

  2. 洛谷 P1929 迷之阶梯

    题目传送门 解题思路: f[i]表示跳到第i层的最少移动次数,如果可以从下面一级跳上来,那么直接跳上来,如果跳不上来,那就往后退,退到不能退或能跳上第i层 AC代码: #include<iost ...

  3. 【t092】迷之阶梯

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在经过地球防卫小队的数学家连续多日的工作之后,外星人发的密码终于得以破解.它告诉我们在地球某一处的古老 ...

  4. CONTEST36 小Z的模拟赛(2)

    A.小Z的可恶路障 题目:http://www.luogu.org/problem/show?pid=U126 题解:暴力也可以过吧.我为了保险先求了一次最短路,然后枚举这条最短路上的所有边... 代 ...

  5. Java中文字符处理的四大迷题

    虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...

  6. [LeetCode] Word Ladder 词语阶梯

    Given two words (beginWord and endWord), and a dictionary, find the length of shortest transformatio ...

  7. 你知道 Twitter,但你可能不知道它的 “成长模式” 和 “参与阶梯”

    当你为产品创建 “成长模式” 时,你需要回答以下关键问题(类Twitter产品:http://www.jinhusns.com/Products/Download/?type=xcj ): 目标:产品 ...

  8. [No00002E]关于大数据,你不知道的6个迷思

    还是那个观点:计算机,编程语言,互联网,大数据等等都只是工具! 导语:看过美剧<纸牌屋>没?知道这部"白宫甄嬛传"为什么会火吗?靠的是大!数!据! 过去两年,在 Net ...

  9. 迷之this?(转)

    1. 迷之this 对于刚开始进行 JavaScript 编程的开发者来说,this 具有强大的魔力,它像谜团一样需要工程师们花大量的精力去真正理解它. 在后端的一些编程语言中,例如 Java.PHP ...

随机推荐

  1. ArcGIS JS之 applyEdits之后要素符号更新

    ArcGIS JS版本 ArcGIS JS 4.11 最近做一个地图服务,通过FeatureLayer.applyEdits()方法,更新唯一值的渲染字段,实现地图渲染根据用户的配置实时更新. 由于A ...

  2. WPF GridView动态添加项并读取数据

    假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...

  3. [JZOJ5281]钦点题解--瞎搞+链表

    [JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过

  4. 移动端隐藏滚动条,css方法

    小白第一次发文记录自己遇到的问题. 关于隐藏移动端滚动条方法很多,这里只说本人用到的. 在PC端隐藏html右侧默认滚动条 html { /*隐藏滚动条,当IE下溢出,仍然可以滚动*/ -ms-ove ...

  5. An incompatible version [1.2.10] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    这个链接的博主写的很详细,直接推荐:https://blog.csdn.net/zhoukikoo/article/details/80532483

  6. OpenStack kilo版(7) 部署dashboard

    安装dashboard  root@controller:~# apt-get install openstack-dashboard  配置 /etc/openstack-dashboard/loc ...

  7. Nginx跨域访问场景配置和防盗链

    跨域访问控制 跨域访问 为什么浏览器禁止跨域访问 不安全,容易出现CSRF攻击! 如果黑客控制的网站B在响应头里添加了让客户端去访问网站A的恶意信息,就会出现CSRF攻击 Nginx如何配置跨域访问 ...

  8. Python标准库3.4.3-urllib.request-21.6

    21.6. urllib.request — Extensible library for opening URLs 翻译:Z.F. The urllib.request module defines ...

  9. 管理Linux软件——aptitude

    https://help.ubuntu.com/lts/serverguide/aptitude.html.en

  10. 利用videojs自动播放下一个

    利用videojs自动播放下一个 一.总结 一句话总结: 在视频放完的ended方法里面,指定video的src,然后this.play()放视频就好 vue来控制视频的链接也是蛮不错的 this.o ...