1. 程式人生 > >演算法練習---跳躍遊戲二(動態規劃)

演算法練習---跳躍遊戲二(動態規劃)

題目描述: 給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。 陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。 你的目標是到達最後一個下標,並且使用最少的跳躍次數。 例如: A=[2,3,1,1,4],到達最後一個下標的最少跳躍次數為 2。(先跳躍 1 步,從下標 0 到 1,然後跳躍 3步,到達最後一個下標。一共兩次) 輸入格式 第一行輸入一個正整數n(1≤n≤100) ,接下來的一行,輸入 n個整數,表示陣列 A。 輸出格式 最後輸出最少的跳躍次數。 樣例輸入 5 3 1 1 1 1 樣例輸出 2
#include<cstdio>  
#include<algorithm>
using namespace std;  
static const int INF=(1<<21);  
static const int MAX=100;  
int main(){  
    int n;  
    int A[MAX],R[MAX];
    scanf("%d",&n);
    for(int i = 0; i < n; ++i){  
        scanf("%d",&A[i]);  
        R[i]=INF;
    }   
    R[0] = 0;  
    for(int i = 0; i < n; ++i){  
        for(int j = 1; j <= A[i] && i + j < n; ++j){  
           R[i+j]=min(R[i+j],R[i]+1);
        }  
    }  

   printf("%d",R[n-1]); 
}