时间限制:1秒
空间限制:32768K
一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1
输入描述:
输入分两行,第一行是数组长度N (1 ≤ N ≤ 10000),第二行是每一项的值,用空格分隔。
输出描述:
输出最少的跳数,无法到达输出-1
输入例子:
5
2 0 1 1 1
输出例子:
4
#include <iostream>
#define maxvalue 0x3f3f3f3f
// 0x3f3f3f3f是个好东西,有兴趣的可以网上查查,也可以看看我的链接
//http://blog.youkuaiyun.com/u011361880/article/details/77511559
int main(void)
{
int n;
while(std::cin >> n)
{
int *a = new int[n];
int *step = new int[2*n];
for(int i=0; i<2*n; ++i)
{
if(i<n)
std::cin >> a[i];
if(i==0)
step[i] = 0;
else
step[i] = maxvalue;
}
for(int i=0; i<n; ++i)
{
int w=a[i];
if(0 == w)
continue;
for(int j=1; j<=w; ++j)
step[i+j] = (step[i]+1 > step[i+j] ? \
step[i+j]:step[i]+1);
}
if(step[n] >= maxvalue)
std::cout << -1 << std::endl;
else
std::cout << step[n] << std::endl;
delete []a;
delete []step;
//delete销毁对象要常记
}
return 0;
}