洛谷P1929 迷之阶梯
P1929 迷之阶梯
题目描述
在经过地球防卫小队的数学家连续多日的工作后,外星人发的密码终于得以破解。它 告诉我们在地球某一处的古老遗迹中,存在有对抗这次灾难的秘密武器。防卫小队立即赶 到这处遗迹。要进入遗迹,需要通过一段迷之阶梯。登上阶梯必须要按照它要求的方法, 否则就无法登上阶梯。它要求的方法有以下三个限制:
如果下一步阶梯的高度只比当前阶梯高 1,则可以直接登上。
除了第一步阶梯外,都可以从当前阶梯退到前一步阶梯。
- 当你连续退下 k 后,你可以一次跳上不超过当前阶梯高度
的阶梯。比如说你现 在位于第 j 步阶梯,并且是从第 j+k 步阶梯退下来的,那么你可以跳到高度不超过当前阶 梯高度+
的任何一步阶梯。跳跃这一次只算一次移动。
开始时我们在第一步阶梯,由于时间紧迫,我们需要用最少的移动次数登上迷之阶梯。 请你计算出最少的移动步数。
输入输出格式
输入格式:
第一行:一个整数 N,表示阶梯步数。
第二行:N 个整数,依次为每层阶梯的高度,保证递增。
输出格式:
第一行:一个整数,如果能登上阶梯,输出最小步数,否则输出-1。
输入输出样例
- 5
- 0 1 2 3 6
- 7
说明
【样例解释】
连续登 3 步,再后退 3 步,然后直接跳上去。
【数据范围】
对于 50%的数据:1≤N≤20。
对于 100%的数据:1≤N≤200。
对于 100%的数据:每步阶梯高度不超过 2^31-1
【题解】
是一个十分显然的DP,而且是一个我显然不会做的DP
【状态定义】F[i]表示跳到第i阶楼梯的最小步数。
【转移】
若h[i] == h[i - 1] + 1 则 F[i] + F[i - 1] + 1
F[i] = min{F[i], F[j + k] + k + 1} 其中k = log2(h[i] - h[j])
【初始状态】
F[1] = 0
【答案】
f[n]
Code
- #include <bits/stdc++.h>
- inline void read(int &x)
- {
- x = ;char ch = getchar();char c = ch;
- while(ch > '' || ch < '')c = ch, ch = getchar();
- while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
- if(c == '-')x = -x;
- }
- inline int min(int a, int b){return a < b ? a : b;};
- const int INF = 0x3f3f3f3f;
- const int MAXN = + ;
- int dp[MAXN], n, h[MAXN];
- int ans = INF;
- int main()
- {
- read(n);
- for(int i = ;i <= n;++ i)
- read(h[i]);
- memset(dp, 0x3f, sizeof(dp));
- dp[] = ;
- for(int i = ;i <= n;i ++)
- {
- if(h[i] == h[i - ] + )
- dp[i] = dp[i - ] + ;
- for(int j = ;j < i;j ++)
- {
- int k = (int)log2(h[i] - h[j]);
- if(( << k) + h[j] < h[i])k ++;
- if(j + k < i)
- dp[i] = min(dp[i], dp[j + k] + k + );
- }
- }
- if(dp[n] >= INF)
- printf("%d", dp[n]);
- else
- printf("-1");
- return ;
- }
洛谷P1929 迷之阶梯的更多相关文章
- 洛谷 P1929 迷之阶梯
题目传送门 解题思路: f[i]表示跳到第i层的最少移动次数,如果可以从下面一级跳上来,那么直接跳上来,如果跳不上来,那就往后退,退到不能退或能跳上第i层 AC代码: #include<iost ...
- 【题解】洛谷P2532 [AHOI2012]树屋阶梯(卡特兰数+高精)
洛谷P2532:https://www.luogu.org/problemnew/show/P2532 思路 来自Sooke大佬的推导: https://www.luogu.org/blog/Sook ...
- P1929 迷之阶梯
题目描述 在经过地球防卫小队的数学家连续多日的工作后,外星人发的密码终于得以破解.它 告诉我们在地球某一处的古老遗迹中,存在有对抗这次灾难的秘密武器.防卫小队立即赶 到这处遗迹.要进入遗迹,需要通过一 ...
- 洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)
P2532 [AHOI2012]树屋阶梯 题目描述 输入输出格式 输入格式: 一个正整数N(1<=N<=500),表示阶梯的高度. 输出格式: 一个正整数,表示搭建方法的个数.(注:搭建方 ...
- 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay
[阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 洛谷P1519 穿越栅栏 Overfencing
P1519 穿越栅栏 Overfencing 69通过 275提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 USACO是100分,洛谷是20分 为什么 ...
- 【洛谷P1352】没有上司的舞会
[洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
随机推荐
- NtQuerySystemInformation 枚举进程
函数原型: NTSTATUS WINAPI NtQuerySystemInformation( _In_ SYSTEM_INFORMATION_CLASS SystemInformat ...
- [转]MEF程序设计指南
<MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Fr ...
- 修改mysql字段类型,修改字段名
修改字段类型(数据类型,长度,默认值) alter table user modify user_name 类型 修改字段名 方法一:alter table 表 change 旧字段名 新字段名 新数 ...
- Redis学习笔记03-持久化
redis是一个内存型数据库,这就意味着,当主机重启或者宕机时,内存中的数据会被清空,redis可能会丢失数据.为了保存数据,实现数据持久化就必须要有一种机制,可以将redis数据库的数据保留在硬盘上 ...
- pycharm新手入门
1.新建项目 2.配置 3.create 4.新建.py文件 5.可以愉快的敲代码啦
- python学习笔记1_import与from方法总结
一.模块&包简介 模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from). 包(package): 包是更大的组织单位,用来 ...
- gulp入门之常见处理方式(三)
整合 streams 来处理错误 默认情况下,在 stream 中发生一个错误的话,它会被直接抛出,除非已经有一个时间监听器监听着 error时间. 这在处理一个比较长的管道操作的时候会显得比较棘手. ...
- js 高亮显示关键字
示例: var defaultEmphasisHandler = function(keyword, data){ var regex = RegExp("("+keyword.r ...
- Django项目:CRM(客户关系管理系统)--38--30PerfectCRM实现King_admin编辑自定义字段验证
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- leetcode 563 - 653
563. Binary Tree Tilt Input: 1 / \ 2 3 Output: 1 Explanation: Tilt of node 2 : 0 Tilt of node 3 : 0 ...