演算法練習---跳躍遊戲二(動態規劃)
阿新 • • 發佈:2019-02-08
題目描述:
給定一個非負整數陣列,假定你的初始位置為陣列第一個下標。
陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。
你的目標是到達最後一個下標,並且使用最少的跳躍次數。
例如:
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]); }