青蛙跳臺階(一維的動態規劃)

  • 題目: 一隻青蛙一次可以跳一級臺階,也可以跳兩級臺階,求青蛙跳上一個n級臺階有多少種跳法。
  • 解析: 利用動態規劃進行求解,首先介紹動態規劃解題三要素:
    (1)定義數組元素的含義
    首先定義dp[i]的含義,要求跳上n級臺階有多少種跳法,則跳上i級太極的跳法一共有dp[i]種跳法,這樣計算出dp[n]就可以得到答案。
    (2)找出數組元素之間的含義
    動態規劃的思想主要是,把一個規模比較大的問題分成幾個規模比較小的問題,然後由小問題推到出大問題。也就是說dp[n]的規模爲n,比它小的是n-1, n-2, n-3… 所以之間必定存在一種關係。如題,跳臺階有兩種方法,跳一級或者跳兩級,所以青蛙到達n級的臺階有兩種方式,一種是由n-1級臺階跳一級到達第n級,另一種爲由n-2級臺階跳兩級到達第n級,即所有可能的跳法爲dp[n] = dp[n - 1] + dp[n - 2]
    (3)找出初試條件
    當n=1時,dp[1] = dp[0] + dp[-1],顯然數組元素不能爲負數,所以對於dp[1]必須給出數值,dp[1] = 1, 同樣,dp[0] = 0;還有當n = 2時,dp[2] = dp[1] + dp[0] = 1,實際,當有兩個臺階的話,有兩種方法,每次跳一級和一次跳兩級,即dp[2] = 2。綜上,初始條件設置爲n <= 2時,dp[n] = n
  • 參考答案:
class solution{
public:
	int JumpFloor(int n){
		int dp[n];
		if(n <= 1)
			return n;
		dp[0] = 0;
		dp[1] = 1;
		dp[2] = 2;
		for(int i = 3; i < n; i++){
			dp[i] = dp[i - 1] + dp[i - 2];
		}
		return dp[n];
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章