又上锁妖塔

(tower.in/tower.out)

[题目描述]

小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很奇怪,他一直在锁妖塔的周围转来转去,可是就是不进去,于是小D问他:“你在干什么?怎么不上去?”小A说:“我在想怎么从锁妖塔外面爬上去”(倒…) 锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同。小A会用仙术,每用一次可以让他向上跳一层或两层,但是每次跳跃后小A都将用完灵力,必须爬过至少一层才能再次跳跃(你可以认为小A需要跳两次一层才休息),小A想用最短的时间爬到塔顶,可是他不能找到时间最短的方案,所以请你帮他找到一个时间最短的方案让他爬到塔顶,小A只关心时间,所以你只要告诉他最短时间是多少就可以了。你可以最后跳到塔外即超过塔高。

[输入格式]

第一行一个数n (n<=10000),表示塔的层数。

接下来的n行每行一个数(<=100),表示从下往上每层的高度。

[输出格式]

一个数,表示最短时间

[样例输入]

5

3

5

1

8

4

[样例输出]

1

[数据规模]

对20%的数据,n<=10

对40%的数据,n<=100

对60%的数据,n<=5000

对100%的数据,n<=10000

【解题思路】

每一层都有两种走法,用仙术,或者爬。而每一层都可以上一层,或者上两层来。

而每次用完仙术,都必须休息一层的时间,所以需要两个一维数组来做动态规划,一个为上次用了仙术的最优值,一个为上次没有用仙术的最优值。

每次做的选择是用或者不用仙术。

以此可以写出状态转移方程

f[i][1]=min(f[i-1][2]+time[i],f[i-1][1]+time[i]);//两个选择,要么上次用了仙术,或者没用,这个存储没有用仙术的方法
f[i][2]=min(f[i-1][1],f[i-2][1]);//这个存储使用仙术的方法。

【参考程序】

#include<iostream>
#include<cstdio>
using namespace std;
int n,time[10005],f[10005][3];
int main()
{
freopen("tower.in","r",stdin);
freopen("tower.out","w",stdout);
cin>>n;
for (int i=1;i<=n;i++) cin>>time[i];
for (int i=1;i<=n;i++) memset(f[i],63,sizeof(f[i]));//初始化
f[1][1]=time[1];
f[1][2]=0;
for (int i=2;i<=n;i++)
{
f[i][1]=min(f[i-1][2]+time[i],f[i-1][1]+time[i]);
f[i][2]=min(f[i-1][1],f[i-2][1]);
}
int ans=min(f[n][1],f[n][2]);
cout<<ans;
return 0;
}

【2018寒假集训 Day2】【动态规划】又上锁妖塔的更多相关文章

  1. 【2018寒假集训 Day2】【动态规划】挖地雷

    挖地雷(Mine) 在一个地图上有N 个地窖(N<=200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且从编号小的地窖通向编号大的地窖.某人可以从任一处 ...

  2. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  3. 【2018寒假集训 Day2】【动态规划】抢金块

    抢金块 输入文件:gold.in 输出文件:gold.out 问题描述: 地面上有一些格子,每个格子上面都有金块,但不同格子上的金块有不同的价值,你一次可以跳S至T步 .如果S=2,T=4.你就可以跳 ...

  4. 【2018寒假集训 Day2】【动态规划】维修栅栏

    维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...

  5. 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)

    钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...

  6. 【2018寒假集训 Day2】【动态规划】垃圾陷阱(挖坑等填,未完成)

    垃圾陷阱 (well) 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了到"垃圾井"中."垃圾井"是农夫们扔垃圾的地方,它的深度为D (2 &l ...

  7. 【2018寒假集训 Day2】【动态规划】回文字

    回文字(palin) 问题描述: 如果一个单词从前和从后读都是一样的,则称为回文字.如果一个单词不是回文字,则可以把它拆分成若干个回文字.编程求一个给定的字母序列,最多要分割成几部分,使每一部分都回文 ...

  8. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  9. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

随机推荐

  1. shell 脚本中的注释详解

    上次写了shell脚本的注释,没想到那么多人的需要,也存在不少不足.这次做个补充吧. 单行注释: 单行注释就比较简单了,直接在行最前端加上符号 # 即可.具体用法如下所示: # this is com ...

  2. SpringBoot中教你手把手配置 https

    升级 https 记录 1.去阿里云购买证书(免费版),并提交审核资料 购买的证书 2.下载证书 下载证书 3.查看上图页面的第三步 JKS证书安装 4.在证书目录下执行阿里云提供的命令,密码都填 p ...

  3. Chrome插件开发(四)

    在前面我们编写了三个比较实用的插件,在实际工作中,我们还会使用很多其他的插件,比如掘金,Pocket之类的,我们可能需要经常启用或禁用插件或者删除插件,如果每次都要点到更多工具->扩展程序中去做 ...

  4. XSS与CSRF详解

    XSS与CSRF详解 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起 ...

  5. Project Euler 55: Lychrel numbers

    五十五.吕克雷尔数(Lychrel numbers) 如果我们把\(47\)翻转过来并和其自身相加,结果是\(47+74=121\)是一个回文数.并不是所有的数都可以这么快的变成回文数,比如说: \[ ...

  6. 20190725 NOIP模拟8

    今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...

  7. 『题解』洛谷P3384 【模板】树链剖分

    Problem Portal Portal1: Luogu Description 如题,已知一棵包含\(N\)个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作\(1\): ...

  8. zabbix 4.2 的安装和设置(mysql57----centos7)

    一.安装RPM [root@localhost ~]# rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release ...

  9. Java把一个文件,输出成多个文件

    前言:我有一个出租车轨迹的txt文本,其中包括多条轨迹.我想把这个文本按照单条轨迹输出出来,每条轨迹放在一个txt文本中. 思路:重要问题就集中在,如何动态的指定输出文件的名字.我想到了StringB ...

  10. 破解微擎安装,免费搭建微擎,免费破解微擎,微擎破解版本,最新版本V2.1.2,一键安装!!

    ​ 微擎是一款基于WEB2.0(PHP+Mysql)技术架构,免费开源的公众平台管理系统,一款致力于将小程序和公众号商业化.智慧化.场景化的自助引擎.微擎提供公众号.微信小程序.支付宝小程序.百度熊掌 ...