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 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...