头歌-EduCoder:袋鼠过河问题

头歌-EduCoder:袋鼠过河问题

任务描述

本关任务:编写一个袋鼠过河问题的小程序。

题目描述

一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩,每隔一米就有一个,每个桩上面有一个弹簧,袋鼠跳到弹簧上就可以跳得更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就表示袋鼠下一跳最多能够跳5米;如果为0,就表示会陷进去无法继续跳跃。河流一共n米宽,袋鼠初始在第一个弹簧上面,若跳到最后一个弹簧就算过河了。给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达,输出-1。

编程要求

根据提示,在右侧编辑器 Begin-End 补充代码,完成袋鼠过河问题

测试说明

平台会对你编写的代码进行测试:

输入描述:输入分两行,第1行是数组长度n(1<=n<=10000),第2行是每一项的值,用空格分隔。
输出描述:输出最少的跳数,若无法到达输出-1。

测试输入:

5
2 0 1 1 1

预期输出:
4

代码实现

#include <iostream>

/********* Begin *********/
#include<stdlib.h>
#include<stdio.h>

int main(){
    
	int m;
	scanf("%d",&m);
	int *a=(int*)malloc(sizeof(int)*m);
	int *dp=(int*)malloc(sizeof(int)*m);
	for(int i=0;i<m;i++){
    
	scanf("%d",&a[i]);
	}
	for(int i=0;i<m;i++){
    
		dp[i]=0;
	      for(int j=0;j<i;j++){
    
	          if(dp[j]!=-1&&j+a[j]>=i){
    
	             int min=dp[j]+1;
	             if(dp[i]==0||dp[i]==-1){
    
	                   dp[i]=min;
	             }
	             else{
    
	                  dp[i]=dp[i]<min?dp[i]:min;
	
	             }
	          }
	      }
	     if(dp[i]==0&&i!=0){
    
	            dp[i]=-1;
	   }
	
	}
	printf("%d",dp[m-1]);
	return 0;
}
/********* End *********/
上一篇:Educoder_Web_移动端电商页面制作


下一篇:前端JS实现对地址字符串的切割(字符串函数的简单应用)