1. 程式人生 > >動態規劃------走樓梯問題

動態規劃------走樓梯問題

假設有10階樓梯,每次可以跨1階或者2階,請問走完10階樓梯總共有多少種走法?

設定一個名為walk(num)的函式,其返回值為走n階樓梯的走法,則問題為walk(10)

設想一下,我們走到最後一步的時候,只有兩種可能的走法:

1.     走一步,正好走完10階樓梯,前面走了9階樓梯

2.     走兩步,正好走完10階樓梯,前面走了8階樓梯

所以,走10階樓梯的問題可以簡化為,走9階樓梯的走法<walk(9)>,然後跨一步,走完。或者走8階樓梯的走法<walk(8)>,然後跨兩步走完。

即walk(10)=walk(9)+walk(8)

那麼走9階樓梯總共有多少種走法呢?

分析過程一樣,假設已經走到最後一步,只能有兩種可能的走法:

1.     走一步,正好走完9階樓梯,前面走了8階樓梯

2.     走兩步,正好走完9階樓梯,前面走了7階樓梯

即 walk(9)=walk(8)+ walk(7)

……

到最後:

如果要走1階樓梯,則只有一種走法:跨一步,即walk(1)=1

如果要走2階樓梯,則有兩種走法:一步一階或者一階兩階,即walk(2)=2


package com.markey.test;

public class TakeStairs {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1; i<11; i++){
			System.out.println("步數為"+i+":"+walk(i));
		}
	}
	public static int walk(int stair){
		int num = 0;
		if(stair > 0){
			switch (stair) {
				case 1:
					num = 1;
					break;
				case 2:
					num = 2;
					break;
				default:
					num = walk(stair-1)+walk(stair-2);
			}
		}
		return num;
	}
}

相關推薦

動態規劃------樓梯問題

假設有10階樓梯,每次可以跨1階或者2階,請問走完10階樓梯總共有多少種走法? 設定一個名為walk(num)的函式,其返回值為走n階樓梯的走法,則問題為walk(10) 設想一下,我們走到最後一步的時候,只有兩種可能的走法: 1.     走一步,正好走完10階樓梯,前面

動態規劃——迷宮

package OJ; import java.util.*; import java.util.regex.Matcher; public class Bully {/** 動態規劃* 走迷宮* 1不能走,0可以走* */private static int[][] gr

【經典動態規劃問題】—樓梯

動態規劃的關鍵點: 1、找狀態,找出能代表狀態的元素作為矩陣下標 2、找到狀態間的依賴關係,從最簡單的情況依次計算 3、複雜的問題求dp[i][j]可能要考慮多種情況。 動態規劃應用中非常經典的走樓梯問題: 有n級臺階,一個人每次上一級或者兩級,問有多少種走完n級臺階的方法。為了

計蒜客--爬樓梯動態規劃

tle nbsp vector main long 3.1 false n) 方法 假設你現在正在爬樓梯,樓梯有 nn 級。每次你只能爬 11 級或者 22 級,那麽你有多少種方法爬到樓梯的頂部? 輸入格式 第一行輸入一個整數 n(1\leq n \leq 50)n

HDU 2041 超級樓梯 簡單動態規劃

多少 .html div ++ n) 導出 can -- http 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2041題目大意:有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?這

climbing-stairs-動態規劃,爬樓梯的路徑數

can all ase 需要 斐波那契數 bsp eps 算法復雜度 tair You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cli

基於python的動態規劃經典問題(爬樓梯,取珠寶,最大子序列和,找零錢)

1,爬樓梯問題 一個人爬樓梯,每次只能爬1個或兩個臺階,假設有n個臺階,那麼這個人有多少種不同的爬樓梯方法 動態規劃的狀態轉移:第 i 個狀態的方案數和第 i-1, i-2時候的狀態有關,即:dp[i]=dp[i-1]+dp[i-2],dp表示狀態矩陣。 def climb_stai

leetcode的python實現 刷題筆記70:爬樓梯動態規劃

假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 示例 1: 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到樓頂。 1. 1 階 + 1

leetcode 746.爬樓梯的最小代價(從暴力遞迴到動態規劃

題目: On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay the cost, you can either cl

Leetcode題解之動態規劃(1)爬樓梯

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/54/ 題目描述: 假設你正在爬樓梯。需要 n 階你才能到達樓頂。

28.動態規劃-使用最小花費爬樓梯-Leetcode 746(python)

題目描述 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選

LeetCode刷題Easy篇爬樓梯問題(遞迴和動態規劃問題)

題目 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinc

一文弄懂動態規劃(DP Dynamic Programming)下樓梯,國王和金礦,揹包問題,Dijkstra演算法

動態規劃 參考連結 漫畫演算法,什麼是動態規劃? DP 動態規劃是一種分階段求解決策問題的數學思想 題目一 問:下樓梯問題,有一座高度是10級臺階的樓梯,從下往上走,每跨一步只能向上1級或者2級臺階,請問有多少中走法。 思路 剛才這個題目,你每走一步就有兩

leetcode746. 使用最小花費爬樓梯 動態規劃簡單題 python3

          陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從

樓梯 牛客網 程式設計師面試金典 動態規劃

上樓梯 牛客網 程式設計師面試經典 動態規劃 題目描述 有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階、2階、3階。請實現一個方法,計算小孩有多少種上樓的方式。為了防止溢位,請將結果Mo

python動態規劃_爬樓梯

# coding = UTF-8 import time def fun(n): if n == 0 or n == 1: return n+1 else: return fun(n -1) + fun(n - 2) # [1, 2,

使用最小花費爬樓梯(Min Cost Climbing Stairs) Java動態規劃入門分析一

前言 題幹 陣列的每個索引做為一個階梯,第 i個階梯對應著一個非負數的體力花費值 cost[i](索引從0開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。

【LOJ#2542】[PKUWC2018]隨機遊(min-max容斥,動態規劃

【LOJ#2542】[PKUWC2018]隨機遊走(min-max容斥,動態規劃) 題面 LOJ 題解 很明顯,要求的東西可以很容易的進行\(min-max\)容斥,那麼轉為求集合的\(min\)。 那麼怎麼求解每個集合的\(min\)呢。 顯然以起點為根節點,如果點集中一個點在另外一個點的子樹內,顯

Leetcode 746. Min Cost Climbing Stairs 最小成本爬樓梯 (動態規劃)

題目翻譯 有一個樓梯,第i階用cost[i](非負)表示成本。現在你需要支付這些成本,可以一次走兩階也可以走一階,注意爬兩階只需要那兩階的第一個成本作為總成本不需要兩階成本相加。 問從地面或者第一階出發,怎麼走成本最小。 測試樣例 Input: cost = [10,

動態規劃 矩陣一端到另一端的種數量

  class Solution { public: int uniquePaths(int m, int n) { //dp[i][j] 表示到達i,j 的種數 vector<vector<int> > dp(m,v