機械人達到指定位置方法數

2022-09-30 23:48:10 字數 2499 閱讀 2703

題目:機械人達到指定位置方法數

《程式設計師**面試指南》第59題 p192 難度:尉★★☆☆

書上題目順序安排極不合理,這題應該放在上一題的前面。上一題沒做出來,大致看了下解析,對這題有一定啟發,很快想出來了。

主要介紹一下本題提出的「用暴力遞迴解決的方法如何優化成動態規劃」的套路

首先是暴力遞迴方法:

// n : 位置為1 ~ n,固定引數

// cur : 當前在cur位置,可變引數

// rest : 還剩res步沒有走,可變引數

// p : 最終目標位置是p,固定引數

// 該函式的含義:只能在1~n這些位置上移動,當前在cur位置,走完rest步之後,停在p位置的方法數作為返回值返回

public int walk(int n, int cur, int rest, int p)

// 如果還有rest步要走,而當前的cur位置在1位置上,那麼當前這步只能從1走向2

// 後續的過程就是,來到2位置上,還剩rest-1步要走

if (cur == 1)

// 如果還有rest步要走,而當前的cur位置在n位置上,那麼當前這步只能從n走向n-1

// 後續的過程就是,來到n-1位置上,還剩rest-1步要走

if (cur == n)

// 如果還有rest步要走,而當前的cur位置在中間位置上,那麼當前這步可以走向左,也可以走向右

// 走向左之後,後續的過程就是,來到cur-1位置上,還剩rest-1步要走

// 走向右之後,後續的過程就是,來到cur+1位置上,還剩rest-1步要走

// 走向左、走向右是截然不同的方法,所以總方法數要都算上

return walk(n, cur + 1, rest - 1, p) + walk(n, cur - 1, rest - 1, p);

}public int ways1(int n, int m, int k, int p)

// 總共n個位置,從m點出發,還剩k步,返回最終能達到p的方法數

return walk(n, m, k, p);

}

套路大體步驟如下:

前提:你的嘗試過程是無後效性的。所謂無後效性,是指乙個遞迴狀態的返回值與怎麼到達這個狀態的路徑無關。某個無後效性的遞迴過程嘗試過程一旦確定,怎麼優化成動態規劃是有固定套路的。

找到什麼可變引數可以代表乙個遞迴狀態,也就是哪些引數一旦確定返回值就確定了

把可變引數的所有組合對映成一張表,有1個可變引數就是一維表,2個可變引數就是二維表……

最終答案要的是表中的哪個位置,在表中標出。

根據遞迴過程的base case,把這張表最簡單不需要依賴其他位置的那些位置填好值

根據遞迴過程非base case的部分,也就是分析表中的普遍位置需要怎麼計算得到,那麼這張表的填寫順序也就確定了。

填好表,返回最終答案在表中位置的值

填寫每乙個位置的值都是o(1)的時間複雜度,所以總的時間複雜度o(n×k)

public int ways2(int n, int m, int k, int p) 

int dp = new int[k + 1][n + 1];

dp[0][p] = 1;

for (int i = 1; i <= k; i++) else if (j == n) else }}

return dp[k][m];

}

以及動態規劃+空間壓縮的解法:

public int ways3(int n, int m, int k, int p) 

int dp = new int[n + 1];

dp[p] = 1;

for (int i = 1; i <= k; i++) else if (j == n) else

leftup = tmp;}}

return dp[m];

}

機械人達到指定位置方法數

假設有排成一行的n個位置,記為1 n,開始時機械人在m位置,機械人可以往左或者往右走,如果機械人在1位置,那麼下一步機械人只能走到2位置,如果機械人在n位置,那麼下一步機械人只能走到n 1位置。規定機械人只能走k步,最終能來到p位置的方法有多少種。由於方案數可能比較大,所以答案需要對1e9 7取模。...

機械人到達指定位置方法數

機械人到達指定位置方法數 假設有排成一行的n個位置,記為1 n,開始時機械人在m位置,機械人可以往左或者往右走,如果機械人在1位置,那麼下一步機械人只能走到2位置,如果機械人在n位置,那麼下一步機械人只能走到n 1位置。規定機械人只能走k步,最終能來到p位置的方法有多少種。由於方案數可能比較大,所以...

機械人的定位問題

下面的大部分概念 於 自主移動機械人導論 這本書 信任度表示 機械人必須有乙個在地圖上有關它位置信任度的方法。機械人是否辨識乙個單獨的特定位置作為它的當前位置,或它是否根據一組可能的位置描述它的位置?如果以單個信任度完全表達多個可能位置,那如何將這多個位置排序?這就是信任度表示方法的設計問題 信任度...