最簡單的動態規劃題,木有之一

2021-09-05 08:40:40 字數 982 閱讀 7641

動態規劃英文名為dynamic programming,其中pogramming指的是**法,而非編寫電腦程式。

動態規劃將問題分成若干個相互重疊的子問題,遞迴的求解子問題,儲存子問題的解,再將它們的解組合起來,求出原問題的解。實際操作中,記錄下子問題的結果,儲存在乙個**中,使得公共的子問題只需要計算一次。

問題的最優解由相關子問題的最優解組合而成,乙個問題的最優解包含其子問題的最優解。

下面是乙個最簡單的動態規劃小題目,沒有之一。

有一座高度是10級台階的樓梯,從下往上走,每跨一步只能向上1級或者2級台階。求一共有多少種走法。

當只剩最後一步就上到10級的時候,有幾種情況呢?

兩種:走了9級了 和 走了8級了

因此,狀態轉移方程是

f(n) = f(n-1) + f(n-2)
而邊界條件呢?

f(1) = 1

f(2) = 2

做了許多重複計算,時間複雜度太高,達到o(2^n)

不再做重複計算,時間複雜度只有o(n)了,而空間複雜度也是o(n)

cache = dict()

def f(n):

if n < 1:

return 0

if n in [1,2]:

return n

if cache.get(n) is not none:

return cache[n]

else:

result = f(n-1) + f(n-2)

cache[n] = result

return result

print(f(100))

時間複雜度還是o(n), 空間複雜度只有o(1)

int climbing_ways(int n) 

return temp;

}

(完)

最簡單簽到,沒有之一

最簡單簽到,沒有之一 原題鏈結 建立乙個陣列來儲存每個字元對應的值的個數 當讀取到數時相應陣列 將出現過的陣列全部計算出大小。進行比較輸出最大值 include include include include include include using namespace std intmain f...

最簡單的樹上染色問題(沒有之一)

感覺最近做題都做傻了,這道題居然沒有任何思路,去世摸魚中 種植花圃 眾所周知,蔡老闆有乙個巨大的莊園。蔡老闆已經厭倦了莊園現有的花圃顏色,決定重新對莊園重新種植花圃。為了簡化這個問題,我們把蔡老闆的莊園抽象成了乙個無向連通圖 g g g 他的每一塊花圃被抽象成了圖中的乙個頂點,相鄰的花圃所表示的結點...

專業找水題 狀壓dp最水題,沒有之一

題目鏈結 現在 能力沒上公升,倒是越來越會找水題了 比例題還水的裸題你值得擁有 這 不是針對競賽的,所以時空限制都很寬鬆 然後就讓我水過去了 對於每個點,包括自己的前m個元素是否取都是一種狀態,所以狀壓一下 才1024不要慫 1 include 2 intn,m,q 3int a 1001 4 in...