int Jump(int A[], int n)
{
int k = 0;
int s = 0;
int j = 0;
int i = j+1;
while(i < n)
{
i = j+1;
int f = k + A[k];
j = f;
for (; i <= j && i < n; ++i)
if (f <= (A[i]+i)) k = i , f = A[i]+i;
++s;
}
return s;
}
int jump(int A[], int n)
{
if (n < 1)return 0;
int steps[n];
steps[n-1] = 0;
for (int i = n-2; i >=0; --i)
{
int step = n;
for (int j = 1; j <= A[i] && (i+j) < n; ++j)
if (step > steps[i+j]) step = steps[i+j];
steps[i] = step + 1;
}
return steps[0];
}
#include<stdio.h>
int main(int argc, char** argv)
{
int A[] = {2,3,1,1,4};
int B[] = {100,99,98,97,96,95,94,93,92,91
,90,89,88,87,86,85,84,83,82,81
,80,79,78,77,76,75,74,73,72,71
,70,69,68,67,66,65,64,63,62,61
,60,59,58,57,56,55,54,53,52,51
,50,49,48,47,46,45,44,43,42,41
,40,39,38,37,36,35,34,33,32,31
,30,29,28,27,26,25,24,23,22,21
,20,19,18,17,16,15,14,13,12,11
,10,9,8,7,6,5,4,3,2,1,1,0};
printf("Greedy :%d\n", Jump(A,5));
printf("Dynamic:%d\n", jump(A,5));
printf("Greedy :%d\n", Jump(B,sizeof(B)/4));
printf("Dynamic:%d\n", jump(B,sizeof(B)/4));
return 0;
}