袋鼠過河

一隻袋鼠要從河這邊跳到河對岸,河很寬,可是河中間打了不少樁子,每隔一米就有一個,每一個樁子上都有一個彈簧,袋鼠跳到彈簧上就能夠跳的更遠。每一個彈簧力量不一樣,用一個數字表明它的力量,若是彈簧力量爲5,就表明袋鼠下一跳最多可以跳5米,若是爲0,就會陷進去沒法繼續跳躍。河流一共N米寬,袋鼠初始位置就在第一個彈簧上面,要跳到最後一個彈簧以後就算過河了,給定每一個彈簧的力量,求袋鼠最少須要多少跳可以到達對岸。若是沒法到達輸出-1 
輸入描述:

輸入分兩行,第一行是數組長度N (1 ≤ N ≤ 10000),第二行是每一項的值,用空格分隔。


輸出描述:

輸出最少的跳數,沒法到達輸出-1
示例1
輸入

5
2 0 1 1 1
輸出

#include <iostream>
#include <vector>

using namespace std; int getmin(vector<int> s,int n) { vector<int> dp(n+1,99999); dp[0]=1; for(int i =1;i<=n;i++) { for(int j = i-1;j>=0;j--) { if(s[j]==0) { continue; } if(j+s[j]>=i) { dp[i]=min(dp[i],dp[j]+1); } } } if(dp[n]==99999) { return -1; } else
        return dp[n]-1; } int main()
{
    //思路:1.先記錄最遠能夠跳的位置i,而後從i-1 一直到 起始位置 遍歷的找能夠到達當前位置i的位置  而後取這些能夠到達當前位置的位置的最少跳數+1。在這個過程當中,尋找最小值
   
    
    
    int number = 0;
    cin >> number;
    
    vector<int> A(number,0);
    for(int i =0;i<number;i++)
    {
        cin >> A[i];
    }
    
    int jump = getmin(A,number);
    cout << jump << endl;
    return 0;
}
相關文章
相關標籤/搜索