leetcode 403. 青蛙過河(dp)

一只青蛙想要過河。 假定河流被等分為若干個單元格,并且在每一個單元格內都有可能放有一塊石子(也有可能沒有)。 青蛙可以跳上石子,但是不可以跳入水中。

給你石子的位置列表 stones(用單元格序號 升序 表示), 請判定青蛙能否成功過河(即能否在最后一步跳至最后一塊石子上)。

開始時, 青蛙默認已站在第一塊石子上,并可以假定它第一步只能跳躍一個單位(即只能從單元格 1 跳至單元格 2 )。

如果青蛙上一步跳躍了 k 個單位,那么它接下來的跳躍距離只能選擇為 k - 1、k 或 k + 1 個單位。 另請注意,青蛙只能向前方(終點的方向)跳躍。

示例 1:

輸入:stones = [0,1,3,5,6,8,12,17]
輸出:true
解釋:青蛙可以成功過河,按照如下方案跳躍:跳 1 個單位到第 2 塊石子, 然后跳 2 個單位到第 3 塊石子, 接著 跳 2 個單位到第 4 塊石子, 然后跳 3 個單位到第 6 塊石子, 跳 4 個單位到第 7 塊石子, 最后,跳 5 個單位到第 8 個石子(即最后一塊石子)。
示例 2:

輸入:stones = [0,1,2,3,4,8,9,11]
輸出:false
解釋:這是因為第 5 和第 6 個石子之間的間距太大,沒有可選的方案供青蛙跳躍過去。

解題思路

數組含義

dp[i][k]為真時代表站在i位置的小青蛙,是從上一個位置(i-k)跳k步的到達的。這也代表了下次小青蛙可以跳k-1,k,k+1步3種選擇

轉態轉移

小青蛙在i位置時,遍歷前面的位置j,看一下前面是否有位置是可以跳過來的。
這需要看2個因素,一是兩個石頭的距離(gap:=stones[i]-stones[j]),二是位于前方石頭的小青蛙是否剛剛好可以選擇跳gap步到達當前i位置。

而可以選擇gap步的只有dp[j][gap],dp[j][gap-1],dp[j][gap+1]這3種狀態,因為如果dp[j][gap-1]為真,代表站在j位置的小青蛙下次可以跳gap,gap-2,gap-1 這3個選擇,而gap步數就是我們需要的。因此狀態轉移為 dp[i][gap]=dp[j][gap]||dp[j][gap-1]||dp[j][gap+1]

為什么步數最多只有n步

因為每一次小青蛙跳的步數,最多只能是上一步加一,而第一步最多只能跳1格,因此跳到n個石頭的步數最多也只是n,因此位于第j個石頭的小青蛙最多只能j+1步,例如第0個石頭的小青蛙只能跳1格,第1個石頭的小青蛙只能跳2格

因此如果gap>j+1,就說明了不可能從j位置跳到當前位置

代碼

func canCross(stones []int) bool {n:=len(stones)dp := make([][]bool, n)for i  := range dp {dp[i]=make([]bool,n)}dp[0][0]=truefor i := 1; i < n; i++ {for j := i-1; j >=0 ; j-- {gap:=stones[i]-stones[j]if gap<=j+1{			dp[i][gap]=dp[j][gap]||dp[j][gap-1]||dp[j][gap+1]if i==n-1&&dp[i][gap]{return true}}}}return false
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391258.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

static、volatile、synchronize

原子性&#xff08;排他性&#xff09;&#xff1a;不論是多核還是單核&#xff0c;具有原子性的量&#xff0c;同一時刻只能有一個線程來對它進行操作&#xff01;可見性&#xff1a;多個線程對同一份數據操作&#xff0c;thread1改變了某個變量的值&#xff0c;要保證thread2…

tensorflow基本教程

轉載自 http://tensornews.cn/ 轉載于:https://www.cnblogs.com/Chris-01/p/11523316.html

1.10-linux三劍客之sed命令詳解及用法

內容:1.sed命令介紹2.語法格式,常用功能查詢 增加 替換 批量修改文件名第1章 sed是什么字符流編輯器 Stream Editor第2章 sed功能與版本處理出文本文件,日志,配置文件等增加,刪除,修改,查詢sed --versionsed -i 修改文件內容第3章 語法格式3.1 語法格式sed [選項] [sed指令…

python pca主成分_超越“經典” PCA:功能主成分分析(FPCA)應用于使用Python的時間序列...

python pca主成分FPCA is traditionally implemented with R but the “FDASRSF” package from J. Derek Tucker will achieve similar (and even greater) results in Python.FPCA傳統上是使用R實現的&#xff0c;但是J. Derek Tucker的“ FDASRSF ”軟件包將在Python中獲得相…

blender視圖縮放_如何使用主視圖類型縮放Elm視圖

blender視圖縮放A concept to help Elm Views scale as applications grow larger and more complicated.當應用程序變得更大和更復雜時&#xff0c;可幫助Elm Views擴展的概念。 In Elm, there are a lot of great ways to scale the Model, and update, but there is more c…

初探Golang(2)-常量和命名規范

1 命名規范 1.1 Go是一門區分大小寫的語言。 命名規則涉及變量、常量、全局函數、結構、接口、方法等的命名。 Go語言從語法層面進行了以下限定&#xff1a;任何需要對外暴露的名字必須以大寫字母開頭&#xff0c;不需要對外暴露的則應該以小寫字母開頭。 當命名&#xff08…

789

789 轉載于:https://www.cnblogs.com/Forever77/p/11524161.html

sql的split()函數

ALTER function [dbo].[StrToList_Test](Str varchar(max), fg NVARCHAR(200)) returns table table(value nvarchar(max) ) as begindeclare tempStr nvarchar(max),len INT LEN(fg); --去除前后分割符 while substring(Str,1,len)fg beginset Strsubstring(Str,len1,len(S…

大數據平臺構建_如何像產品一樣構建數據平臺

大數據平臺構建重點 (Top highlight)Over the past few years, many companies have embraced data platforms as an effective way to aggregate, handle, and utilize data at scale. Despite the data platform’s rising popularity, however, little literature exists on…

初探Golang(3)-數據類型

Go語言擁有兩大數據類型&#xff0c;基本數據類型和復合數據類型。 1. 數值類型 ##有符號整數 int8&#xff08;-128 -> 127&#xff09; int16&#xff08;-32768 -> 32767&#xff09; int32&#xff08;-2,147,483,648 -> 2,147,483,647&#xff09; int64&#x…

freecodecamp_freeCodeCamp的服務器到底發生了什么?

freecodecampUpdate at 17:00 California time: We have now fixed most of the problems. Were still working on a few known issues, but /learn is now fully operational.加利福尼亞時間17:00更新 &#xff1a;我們現在解決了大多數問題。 我們仍在處理一些已知問題&#…

為什么Linux下的環境變量要用大寫而不是小寫

境變量的名稱通常用大寫字母來定義。實際上用小寫字母來定義環境變量也不會報錯&#xff0c;只是習慣上都是用大寫字母來表示的。 首先說明一下&#xff0c;在Windows下是不區分大小寫的&#xff0c;所以在Windows下怎么寫都能獲取到值。 而Linux下不同&#xff0c;區分大小寫&…

python:連接Oracle數據庫后控制臺打印中文為??

打印查詢結果&#xff0c;中文顯示為了&#xff1f;&#xff1f;&#xff1f; [(72H FCR, 2.0), (?????, 8.0)] E:\Python35\Lib\site-packages中新增文件&#xff1a; sitecustomize.py import os os.environ[NLS_LANG] SIMPLIFIED CHINESE_CHINA.UTF8 轉載于:https://w…

時間序列預測 時間因果建模_時間序列建模以預測投資基金的回報

時間序列預測 時間因果建模Time series analysis, discussed ARIMA, auto ARIMA, auto correlation (ACF), partial auto correlation (PACF), stationarity and differencing.時間序列分析&#xff0c;討論了ARIMA&#xff0c;自動ARIMA&#xff0c;自動相關(ACF)&#xff0c;…

初探Golang(4)-map和流程控制語句

1.map map 是引用類型的&#xff0c;如果聲明沒有初始化值&#xff0c;默認是nil。空的切片是可以直接使用的&#xff0c;因為他有對應的底層數組,空的map不能直接使用。需要先make之后才能使用。 //1, 聲明map 默認值是nil var m1 map[key_data_type]value_data_type 聲明 …

網絡傳輸之TCP/IP協議族

我們現實網絡無處不在&#xff0c;我們被龐大的虛擬網絡包圍&#xff0c;但我們卻對它是怎樣把我們的信息傳遞并實現通信的&#xff0c;我們并沒有了解過&#xff0c;那么當我們在瀏覽器中出入一段地址&#xff0c;按下回車這背后都會發生什么&#xff1f; 比如說一般場景下&am…

(58)PHP開發

LAMP0、使用include和require命令來包含外部PHP文件。使用include_once命令&#xff0c;但是include和include_once命令相比的不足就是這兩個命令并不關心請求的文件是否實際存在&#xff0c;如果不存在&#xff0c;PHP解釋器就會直接忽略這個命令并且顯示一個錯誤消息&#xf…

css flexbox模型_如何將Flexbox后備添加到CSS網格

css flexbox模型I shared how to build a calendar with CSS Grid in the previous article. Today, I want to share how to build a Flexbox fallback for the same calendar. 在上一篇文章中&#xff0c;我分享了如何使用CSS Grid構建日歷。 今天&#xff0c;我想分享如何為…

python:封裝連接數據庫方法

config.py # 數據庫測試環境 name *** password ****** host_port_sid 10.**.*.**:1521/bidbuat OracleOperation.py import cx_Oracle import configclass OracleOperation(object):# 執行下面的execute_sql方法時會自動執行該初始化方法進行連接數據庫def __init__(self):…

貝塞爾修正_貝塞爾修正背后的推理:n-1

貝塞爾修正A standard deviation seems like a simple enough concept. It’s a measure of dispersion of data, and is the root of the summed differences between the mean and its data points, divided by the number of data points…minus one to correct for bias.標…