動態規劃之跳躍遊戲

2021-10-12 03:21:19 字數 1471 閱讀 7073

跳躍遊戲

給出乙個非負整數陣列,你最初定位在陣列的第乙個位置,陣列中的每個元素代表你在那個位置可以跳躍的最大長度,判斷你是否能到達陣列的最後乙個位置。

注意事項:

陣列a的長度不超過5000,每個元素的大小不超過5000

樣例 1:

輸入:[2,3,1,1,4]

輸出:true

樣例 2:

輸入:[3,2,1,0,4]

輸出:false

解答:

定義dp[i][j]為陣列長度為i時,以第j個位置為最後乙個跳點時是否能到達最後乙個位置。

則有狀態轉換方程:

dp[i][j] = dp[j][j] && (j+a[j] >= i)

當i==j時,dp[i][j] = dp[i][0] || dp[i][1] || … || dp[i][j-1]

class

solution

/* if(a.size() > 1 && a[0] == 0)

// 貪心策略下取當前點n往後跳的範圍內能使下一次跳躍的範圍最大的那個點

// 即 n + a[k] + k 最大

int next = -1;

int max = 0;

for (int i = 0; i < a.size();)

}if(next >= a.size() - 1)

if(next != -1 && a[next] == 0)

i = next;

next = -1;

max = 0;

}return true;*/

/* 定義dp[i][j]為陣列長度為i時,以第j個位置為最後乙個跳點時是否能到達最後乙個位置。

則有狀態轉換方程:

dp[i][j] = dp[j][j] && (j+a[j] >= i)

當i==j時,dp[i][j] = dp[i][0] || dp[i][1] || ... || dp[i][j-1]

*/const

int m =

5001

;const

int n =

5001

;bool dp[m]

[n];

for(

int i =

0; i < m; i++)}

dp[0]

[0]=

true

; dp[1]

[1]=

true

;for

(int i =

1; i <= a.

size()

; i++)}

return dp[a.

size()

][a.

size()

];}}

;

遞迴與動態規劃 跳躍遊戲

題目 給定陣列arr,arr i k代表可以從位置i向右跳1 k個距離。比如,arr 2 3,代表從位置2可以跳到位置3 位置4或者位置5。如果從位置0出發,返回最少跳幾次能跳到arr最後的位置上。舉例 arr 3,2,3,1,1,4 arr 0 3,選擇跳到位置2 arr 2 3,可以跳到最後的位...

跳躍遊戲一(動態規劃)

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 a 2,3 1,1 4 能夠跳躍到最後乙個下標,輸出true a 3,2,1,0,4 a 3,2 1,0 4 不能跳躍到...

跳躍遊戲(貪心和動態規劃)

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例 2 輸入...