跳格子_动态规划

问题 H: 跳格子

时间限制: 1 Sec  内存限制: 64 MB
提交: 17  解决: 14
[提交][状态][讨论版]

题目描述

大家都说要劳逸结合,Ayumi, Mitsuhiko, Genta画完方格就出去运动啦!

他们来到了一片空地,画了N个连续的方格,每个方格上随机填上了一个数字,大家从第一个格子开始,每次可以向后跳不超过当前格子上的数的步数,大家开始就此比赛,看谁跳到最后一个格子的步数最少。

作为队长的Genta显然是想获得胜利的,所以他打电话给Conan求助,可是Conan在玩游戏,所以就向你求助了。

输入

输入第一行包含一个整数N,表示画的格子的个数。

第二行包含N整数,表示每个格子上的数ai。

对于40%的数据满足N≤10,ai≤10,对于100%的数据满足N≤5000,ai≤1000

输出

输出一行,表示跳的最少步数。

样例输入

5
2 3 1 1 1

样例输出

2
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n;
    int a[6005];
    int step[6005];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        step[i]=i;
    }
    for(int i=0;i<n;i++){
        for(int j=1;j<=a[i];j++){
            if(step[i]+1<step[i+j]){
                step[i+j]=step[i]+1;
            }
        }
    }
    printf("%d",step[n-1]);
    return 0;
}
时间: 2024-10-20 00:33:55

跳格子_动态规划的相关文章

算法导论_第十六章_动态规划_creatshare分享会

动态规划 注:该篇为本人原创,转载请注明出处:http://blog.csdn.net/chudongfang2015/article/details/51590817--开心 -.- 个人对动态规划的理解: 1.动态规划是一个付出额外空间来节省时间,就是所谓的空间换时间. 2.动态规划储存每个状态的最优解. 3.动态规划是用来把子问题的结果储存下来,再次用到的时候就不必再进行重复计算. 算法导论对动态规划的解释: 动态规划和分治方法相似,都是通过组合子问题的解来求解原问题,分治方法将问题划分为

【动态规划】skiing_深度搜索_动态规划

问题 B: [动态规划]skiing 时间限制: 1 Sec  内存限制: 128 MB提交: 28  解决: 11[提交][状态][讨论版] 题目描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个 区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7

算法导论_动态规划_最长公共子序列

一.动态规划的概念 动态规划(Dynamic Programming)是通过组合子问题的解而解决整个问题的.分治是指将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原始问题的解,与此不同,动态规划适用于子问题不是独立的情况,也就是各个子问题包含公共的子问题.在这种情况下,采用分治法会做许多不必要的工作,即重复地求解公共地子问题.动态规划算法对每个子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案. 动态规划通常应用于最优化问题.此类问题可

算法第一讲_动态规划

转自follow your hearthttp://www.cnblogs.com/kkgreen/archive/2011/06/26/2090702.html 转载:http://blog.csdn.net/woshioosm/article/details/7438834{思考动态规划的第一点----最优子结构思考动态规划的第二点----子问题重叠思考动态规划的第三点----边界思考动态规划的第四点----子问题独立思考动态规划的第五点----做备忘录思考动态规划的第六点----时间分析步

0-1背包问题_动态规划

普通背包问题可以用贪心来解决,而0-1背包问题只能靠动态规划来做,而且在我们平时的做题中经常会遇到0-1背包问题的变形,所以有必要牢牢掌握0-1背包问题的思想和解题思路. 根据下面的图更可以找到应该选那些背包 下面是我根据此思路模拟的代码 1 #include<bits/stdc++.h> 2 using namespace std; 3 int array3[100];//价值 4 int array1[100];//物品重量 5 int capacity;//容量 6 int n;//物品

最优二叉查找树_动态规划

原问题是给出各个节点和各个节点的被查找概率,然后构造一棵各个节点平均被查找比较次数最小的树,则该问题可以用动态规划来解决 示例如下 推广到一般的情况,并设T(i, j)是由记录{ri, …, rj}(1≤i≤j≤n)构成的二叉查找树,C(i, j)是这棵二叉查找树的平均比较次数,有下列分析 观察这个表,可知可知左边的表的第一行的第四列就是我们要求的最优平均比较次数,而右边的表我们可以知道在c(i ,j)得到最优解,即平均查找次数最小的根节点,比如一共四个节点,则我们从右边的R(1,4)的值即3是

矩阵连乘问题_动态规划

1)问题引导 从上面我们可以知道不同的结合方式,矩阵计算的次序数不一样,那么如何求这个最小次序数的划分,即如何结合.这就是矩阵连乘问题 使用动态规划可以解决 如下图,如果我们使用递归,则会产生大量的重复计算,复杂度太高,当然使用备忘录降低复杂度.不过更好的是使用递推 递推算法分析如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 void matrixChain(int n,int p[],int m[][100],int s[][10

完全背包详解_动态规划

题目描述 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M ,而价值的和为最大. 输入 第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30):第2..N+1 行:每行二个整数Wi,Ui,表示每个物品的重量和价值. 输出 仅一行,一个数,表示最大总价值,格式如样例. 样例输入 10 4 2 1 3 3 4 5 7 9 样例输出 max=12 解析

BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 第一眼以为是组合.然后更滑稽的是用错误的方法手算样例居然算出来是对的...我数学是有多差... 题解也是看了好半天,有点难理解. 感觉PoPoQQQ神犇讲得还是比较清楚的.传送门:http://blog.csdn.net/popoqqq/article/details/40188173 我们用dp[