9.1 有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階、2階或3階。實現乙個方法,計算小孩有多少種上樓梯的方法。
解法:我們可以採用自上而下的方式來解決這個問題。小孩上樓梯的最後一步,也就是抵達第n階的那一步,可能走1階、2階或3階。也就是說,最後一步可能是從第n-1階往上走1階、從n-2階往上走2階,或從第n-3階往上走3階。因此,抵達最後一階的走法,其實就是抵達這最後三階的方式的總和。
遞迴的方法實現:
int countwaysd(intn)}
使用3個臨時變數的方法:
int countways(intn)
return
ret;
}
使用dp的方法,需要乙個陣列來記錄前面已經求出的值。
int countwaysdp(int n,intdp)
c++實現**:
#include#include#include
using
namespace
std;
const
int max=1000
;int countwaysd(intn)}
int countways(int
n)
return
ret;
}int countwaysdp(int n,int
dp)int
main()
;
for(int i=1; i<10; i++)
cout
}
Prince and Princess 動態規劃
題目大意 求兩個序列的最長子序列 include include include includeusing namespace std int n,p,q const int maxn 250 250 int num1 maxn int hash maxn stack maxn int main i...
Colored Rectangles 動態規劃
題意 三種木棍,分別有 r對 g對 b對兩種不同木棍對可以弄移乙個矩形,要求矩形面積總和最大 思路 看題面,這種幾個變數互相影響並且最終目標固定的題目感覺就要用dp,而且資料比較小應該就是能用三維dp,雖然我比賽時沒做出來,但是我想的挺明白的,狀態轉移就是dp i j k max dp i 1 j ...
遞迴和動態規劃
暴力遞迴 1,把問題轉化為規模縮小了的同類問題的子問題 2,有明確的不需要繼續進行遞迴的條件 base case 3,有當得到了子問題的結果之後的決策過程 4,不記錄每乙個 子問題的解 動態規劃 1,從暴力遞迴中來 2,將每乙個子問題的解記錄下來,避免重複計算 3,把暴力遞迴的過程,抽象成了狀態表達...