vijos 又上锁妖塔

题目描述

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

[数据规模]

对20%的数据,n<=10

对40%的数据,n<=100

对60%的数据,n<=5000

对100%的数据,n<=10000

输入格式

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

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

输出格式

一个数,表示最短时间

/*
同时记录更新两个状态
dp[i] :第i层是飞上去的
dz[i]  :第i层是走上去的
dp[i]=min(dz[i-1],dz[i-2]);
dz[i]=min(dp[i-1]+a[i],dz[i-1]+a[i]);
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[100010],dp[100010],dz[100010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]);
    dz[1]=a[1];
    for(int i=2;i<=n;i++)
    {
        dp[i]=min(dz[i-1],dz[i-2]);
        dz[i]=min(dp[i-1],dz[i-1])+a[i];
    }
    printf("%d\n",min(dp[n],dz[n]));
    return 0;
}

  

时间: 2024-10-09 04:40:53

vijos 又上锁妖塔的相关文章

洛谷 P2800 又上锁妖塔

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

又上锁妖塔

题目背景 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑> 题目描述 可是小A很奇怪,他一直在锁妖塔的周围转来转去,可是就是不进去,于是小D问他:"你在干什么?怎么不上去?"小A说:"我在想怎么从锁妖塔外面爬上去"(倒-) 锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同.小A会用仙术,每用一次可以让他向上跳一层或两层,但是每次跳跃后小A都将用完灵力,必须爬过

9月22日 又上锁妖塔

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

【解题报告】[动态规划]RQNOJ - PID82 / 又上锁妖塔

原题地址:http://www.rqnoj.cn/problem/82 解题思路: 简单的动态规划 状态表示:DP[i][0]表示当前在第i层,且当前跳跃状态不可用,此时消耗的最短时间.   DP[i][1]表示当前在第i层,且当前跳跃状态可用,此时消耗的最短时间. 状态转移方程: DP[i][0]=min(DP[i-1][1],DP[i-2][1]); DP[i][1]=min(DP[i-1][0],DP[i-1][1])+t[i-1]; 初始状态: DP[0][0]=INF DP[0][1]

算法之DP

一般DP 都是有模板的,先初始化,然后找到不同状态下数值的关系,使得某个状态可用另一个状态由一个固定的方式转移而来,列出状态转移方程,这就是DP: 例题 P1216 [USACO1.5]数字三角形 Number Triangles 1 f[i][j]+=max(f[i-1][j-1],f[i-1][j]); 方程 P1044 栈 1 f[i]+=f[j]*f[i-j-1]; 方程 P2800 又上锁妖塔 1 f[i]=min(f[i-1]+t[i],min(f[i-2]+t[i-1],f[i-3

Vijos P1389婚礼上的小杉

背景 小杉的幻想来到了经典日剧<求婚大作战>的场景里……他正在婚礼上看幻灯片,一边看着可爱的新娘长泽雅美,一边想,如果能再来一次就好了(-.-干嘛幻想这么郁闷的场景……). 小杉身为新一代的山下智久,在虔诚地在心里呼喊了几千次以后,妖精终于出现了. 妖精说,我还是可以帮你回到这张照片的过去,让你再来一次,可是你要帮我一个忙. (若对情节有任何疑问,请观看原剧) 描述 原来妖精先生在夏威夷的教堂里住了太久,家里的信件堆积了太多,凌乱不堪,你的工作就是帮他整理信件. 总计N封的信件,每个信件都有自

Vijos上的三道LCA: 1427, 1460, 1710

Vijos上一共有三道标记为LCA的题目:P1427机密信息,P1460拉力赛,P1710Mrw的工资计划. 首先是P1427机密信息.考虑到只需要求一次LCA,数据范围也不大,直接暴力解决,只是分类讨论有点麻烦. 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <queue> 6 #define re

【vijos】1882 石阶上的砖(中位数+特殊的技巧)

https://vijos.org/p/1882 这种题很赞.. 以后记得这些绝对值最小的优先想中位数啊orz 首先我们将所有的高度都减掉他们的高度差,那么得到的应该是一串高低不平的数列,那么题目转化为,将这个改变后的数列变成一样高的最小费用. 那么显然是中位数啦. 好赞. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream

Vijos 1523 贪吃的九头龙 【树形DP】

贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted by JackDavid127 描述 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落. 有一天,有M个脑袋的九头龙看到一棵长有N个果子的果树,喜出望外,