動態規劃 美團筆試題 拜訪

2021-07-11 02:43:04 字數 1460 閱讀 4144

題目:現在有乙個城市銷售經理,需要從公司出發,去拜訪市內的商家,已知他的位置以及商家的位置,但是由於城市道路交通的原因,他只能在左右中選擇乙個方向,在上下中選擇乙個方向,現在問他有多少種方案到達商家位址。

給定乙個地圖map及它的長寬n和m,其中1代表經理位置,2代表商家位置,-1代表不能經過的地區,0代表可以經過的地區,請返回方案數,保證一定存在合法路徑。保證矩陣的長寬都小於等於10。

例: 輸入:[[0,1,0],[2,0,0]],2,3

輸出:2

思路:這個題目簡單一點想,就是需要我們從給定的大矩陣中找出乙個由 經理和商家組成的小矩陣,來進行dp動態規劃。根據題目:每次只能在左右選擇乙個方向,在上下選擇乙個方向。

我們根據小矩陣找dp。

dp[i][j]的意義是i,j這個點到x1,y1這個點的有多少種。

dp 遞推公式這裡為分為兩種:

在主對角線也就是我們圖上第一種情況:

dp[i][j] = map[i][j]==-1?0:dp[i-1][j]+dp[i][j-1];

在副對角線也就是我們圖上第二種情況:

dp[i][j] = map[i][j]==-1?0:dp[i-1][j]+dp[i][j+1];

根據以上思路可以寫出:

/**

* step1:先找到經理和商家的位置,用(x1,y1)記錄經理,用(x2,y2)記錄商家

* step2:判斷行走方向,兩條行走方向副對角線和主對角線

*@param map

*@param n

*@param m

*@return

*/public

intcountpath(int map, int n, int m) else

if(map[i][j]==2)}}

//如果經理和商店位置相同 就不需要走

if (x1==x2&&y1==y2)

//這裡用x1儲存x座標較小的乙個方便計算

if (x1>x2)

int dp=new

int[n][m];

//在主對角線

if(y1// 兩點處在主對角線上

dp[x1][y1] = 1;

//先把外圈的賦值防止陣列越界

for (int i = x1+1; i<=x2; i++)

for (int j = y1+1; j <=y2; j++)

for (int i = x1+1; i <= x2; i++)

}}else

for (int j = y1-1; j >=y2; j--)

for (int i = x1+1; i <= x2; i++) }}

return dp[x2][y2];

}

美團筆試題 拜訪

題目描述 現在有乙個城市銷售經理,需要從公司出發,去拜訪市內的商家,已知他的位置以及商家的位置,但是由於城市道路交通的原因,他只能在左右中選擇乙個方向,在上下中選擇乙個方向,現在問他有多少種方案到達商家位址。給定乙個地圖map及它的長寬n和m,其中1代表經理位置,2代表商家位置,1代表不能經過的地區...

美團點評筆試題

1.css中浮動的影響和清除浮動的方法 2.sjf演算法,完成時間 3.有向圖和無向圖的鄰接矩陣有什麼區別 4.乙個無向圖的鄰接矩陣中各元素之和是圖中邊的條數的兩倍.5.20個元素氣泡排序,最多相鄰元素的比較次數?6.資料流圖中加工編號 7.長度為32的有序表中進行二分查詢,平均查詢長度?8.fir...

牛客(美團) 拜訪(動態規劃)

現在有乙個城市銷售經理,需要從公司出發,去拜訪市內的商家,已知他的位置以及商家的位置,但是由於城市道路交通的原因,他只能在左右中選擇乙個方向,在上下中選擇乙個方向,現在問他有多少種方案到達商家位址。給定乙個地圖map及它的長寬n和m,其中1代表經理位置,2代表商家位置,1代表不能經過的地區,0代表可...