leetcode 動態規劃入門問題細化解析(一)

2021-10-02 16:21:53 字數 2188 閱讀 5426

1.最小花費爬樓梯

大佬的題解,跟官方解答思路一樣(自己加了注釋內容)

class

solution

return

min(c1, c2)

;//比較到n - 1和n - 2花費體力的值}}

;

這個大佬的題解更好理解

class

solution

};

2.打家劫舍

具體分析看題解第二位大佬(靈魂畫手)的題解

思路標籤:動態規劃

動態規劃方程:dp[n] = max( dp[n-1], dp[n-2] + num )

由於不可以在相鄰的房屋闖入,所以在當前位置 n 房屋可盜竊的最大值,要麼就是 n-1 房屋可盜竊的最大值,要麼就是 n-2 房屋可盜竊的最大值加上當前房屋的值,二者之間取最大值

舉例來說:1 號房間可盜竊最大值為 33 即為 dp[1]=3,2 號房間可盜竊最大值為 44 即為 dp[2]=4,3 號房間自身的值為 22 即為 num=2,那麼 dp[3] = max( dp[2], dp[1] + num ) = max(4, 3+2) = 5,3 號房間可盜竊最大值為 55

時間複雜度:o(n)o(n),nn 為陣列長度

class

solution

return dp[len];}

}

我用c++寫了乙個沒過

class

solution

return

max(nums[len -1]

, nums[len -2]

);}}

;

是因為注釋掉的那句沒加上,過不了輸入:[2,1,1,2] 正確輸出:4

所以還是看看大佬的

3.除數博弈

(沒看題解時,自己只想到愛麗絲令n-x為非三素數時她才能贏,若n = kx, x不等於1,則n - x = (k - 1)x = n』,n』不可能是素數)

題解中的第一位大佬的歸納法用自己的話概括一下(語文課套路)

1.愛麗絲佔到 2 贏,佔到 1 輸;

2.若愛麗絲當前為奇數,奇數的約數只能是奇數或者 1,因此下乙個一定是偶數;

3.若愛麗絲當前為偶數, 偶數的約數可以是奇數可以是偶數也可以是 1,因此直接減 1,則下乙個是奇數,即鮑勃拿到的一定是奇數,愛麗絲拿到的一定是偶數,一直變小就會到2;

因此,奇則輸,偶則贏

class

solution

:def

divisorgame

(self, n:

int)

->

bool

: target =[0

for i in

range

(n+1)]

target[1]

=0#若愛麗絲抽到1,則愛麗絲輸

if n<=1:

return

false

else

:

target[2]

=1#若愛麗絲抽到2,則愛麗絲贏

for i in

range(3

,n+1):

for j in

range(1

,i//2)

:#沒學過爬蟲,意思應該是從1到i的根號(?),j代表x

# 若j是i的餘數且target[i-j]為假(0)的話,則代表當前為真(1)

if i%j==

0and target[i-j]==0

:#鮑勃拿到i - j,而target[i - j] = 0代表失敗,鮑勃失敗愛麗絲的target[i] = 1

target[i]=1

break

return target[n]

==1

4.判斷子串行

這是博第乙個寫出來的在動態規劃下的題目,雖然不是用動態規劃的方法~

class

solution}if

(f ==

false)}

return

true;}

};

動態規劃入門

1 用 dp 做的題大多數返回值是int boolean,求max min,不能打亂原來輸入順序。2 動態規劃有兩個重要定義,乙個叫 optimal substructure 另乙個叫 overlap subproblem 各種排序 tree 類問題中,都會用到 divide conquer 的思想...

動態規劃入門

大家可以看看這篇文章dp,哪個更容易理解就看哪個!一 動態規劃的定義 動態規劃程式設計是一種針對於解決最優化問題的一種途徑 一種方法,而不是一種特殊演算法,也就是說它沒有固定的模板。在動態規劃中,每走一步都要看看能不能最優,而且動態規劃最擅長的就是多階段問題!二 動態規劃的基本概和基本模型構成 1....

動態規劃入門

學動態規劃自然要從數字三角形開始起步,那麼我們就先從數字三角形開始。數字三角形題目 有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行之外的每個數的左下方和右下方各有乙個數,如下圖所示 3 24 10 1 4 3 2 20 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...