動態規劃 乙個簡單爬梯子問題

2021-05-21 10:40:08 字數 761 閱讀 8748

問題描述

乙個樓梯有20級,每次走1級或兩級,請問從底走到頂一共有多少種走法?

分析:假設從底走到第n級的走法有f(n)種,走到第n級有兩個方法,乙個是從(n-1)級走一步,另乙個是從第(n-2)級走兩步,前者有f(n-1)種方法,後者有f(n-2)種方法,所以有f(n)=f(n-1)+f(n-2),還有f(0)=1,f(1)=1.

遞迴程式設計實現

程式1#include

int f(int n)

int main()

現在來說說動態規劃的基本思想

動態規劃的關鍵是發現子問題和怎麼記錄子問題,以上面的例子說明

(1)對子問題可遞迴的求解,當n>1時,f(n)=f(n-1)+f(n-2);否則,f(1)=f(0)=1;

(2)這些子問題是有重疊的,即求解某個問題時,某些子問題可能需要求解多次。例如求解f(5)時,f(2)就被求解了3次。

在上面兩個條件下,用動態規劃的方式來求解會高效很多。就是把子問題記錄下來,每個子問題只求解一次,從而提高了效率。

程式2#include

int result[100];

int f(int n)

int main()

程式3#include

int f[100];

int main()

程式3是否讓你想起了那個兔子繁殖的問題呢?

小結一下

動態規劃,採用分治的策略,把求最優解問題分解為求若干子問題的最優解,記錄子問題的解,化繁為簡,很實用,也很高效。

動態規劃 計畫乙個公司聚會

問題 stewart教授是一家公司總裁的顧問,這家公司計畫乙個公司聚會。這個公司有乙個層次結構 也就是,管理關係形成一棵以總裁為根的樹。人事部給每個雇員以喜歡聚會的程度來排名,這是乙個實數。為了使每個參加者都喜歡這個聚會,總裁不希望乙個雇員和他 她 的直接上司同時參加。stewart教授面對一顆描述...

動態規劃(一) 找零問題

有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim 小於等於1000 代表要找的錢數,求換錢有多少種方法。給定陣列penny及它的大小 小於等於50 同時給定乙個整數aim,請返回有多少種方法可以湊成aim。測試樣例 ...

動態規劃(一) 0 1揹包問題

1 題目描述 對於一組不同重量 不可分割的物品,我們需要選擇一些裝入揹包,在滿足揹包最大重量限制的前提下,揹包中物品總重量的最大值是多少呢?2 輸入 第一行是物品的個數n 1 n 100000 揹包容量w 1 w 1000000 第二行是n個物品的重量。3 輸出 輸出最大值 4 樣例輸入5 9 2 ...