1. 程式人生 > >計蒜客-跳躍遊戲二 (簡單dp)

計蒜客-跳躍遊戲二 (簡單dp)

inf PE sizeof size stream 分析 數組初始化 整數 CA

題目鏈接:https://nanti.jisuanke.com/t/20

跳躍遊戲二

給定一個非負整數數組,假定你的初始位置為數組第一個下標。數組中的每個元素代表你在那個位置能夠跳躍的最大長度。你的目標是到達最後一個下標,並且使用最少的跳躍次數。

例如:

A = [2,3,1,1,4],到達最後一個下標的最少跳躍次數為 2。(先跳躍 1 步,從下標 0 到 1,然後跳躍 3 步,到達最後一個下標。一共兩次)

輸入格式

第一行輸入一個正整數 n(1n100) ,接下來的一行,輸入 n 個整數,表示數組 A。

輸出格式

最後輸出最少的跳躍次數。

樣例輸入

5
3 1 1 1 1

樣例輸出

2

解題分析:
簡單dp題,適合新手練習,開一個dp數組用來保存到第i個數的最少跳躍步數即可,然後模擬跳躍的過程即可寫出狀態轉移方程。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define INF 0x3f3f3f3f

int main()
{
    int n,i,j;
    while(cin>>n)
    {
        
int a[110]; for(i=0;i<n;i++)cin>>a[i]; int dp[110];memset(dp,INF,sizeof(dp)); //因為要求dp[i]的最小值,所以先將dp數組初始化為一個很大的數 dp[0]=0; for(i=0;i<n;i++) //用兩個循環來模擬跳躍過程 { for(j=1;j<=a[i];j++) { if(i+j>=n)break
; dp[i+j]=min(dp[i+j],dp[i]+1); } } cout<<dp[n-1]<<endl; } return 0; }

2018-05-14

計蒜客-跳躍遊戲二 (簡單dp)