記憶化搜尋 dp

2021-10-02 06:03:28 字數 1509 閱讀 3856

例子:33

1132

3411

1先去找(1,

1)的最長距離,很明顯為1

接著找(1,

2)的最長距離,很明顯為1

接著找(1,

3)的最長距離,為2((

1,3)

->(1

,2))

然後找(2,

1)的最長距離,為2((

2,1)

->(1

,1))

然後是(2,

2)的最長距離,如果沒有記憶化,那麼搜尋過程為:(2,

2)->(2

,1)-

>(1

,1)但是(2

,1)之前已經搜過了,再去搜就是浪費時間,之前搜尋已經知道(2,

1)的值為2,那麼搜尋過程就是縮短為:(2,

2)->(2

,1),即為3

應用實戰:

題目描述

michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子:

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可行的滑坡為24-17-16-1(從24開始,在1結束)。當然25-24-23-…-3-2-1更長。事實上,這是最長的一條。

輸入格式

輸入的第一行為表示區域的二維陣列的行數r和列數c(1≤r,c≤100)。下面是r行,每行有c個數,代表高度(兩個數字之間用1個空格間隔)。

輸出格式

輸出區域中最長滑坡的長度。

輸入輸出樣例

輸入 #1 複製

5 51 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

輸出 #1 複製

25

#include.h>

using namespace std;

const int n

=110

;int dx[4]

=;int dy[4]

=;int f[n]

[n];

int a[n]

[n];

int n,m;

int dfs

(int x,int y)

}return f[x]

[y];

}int main()

DP 滑雪 記憶化搜尋)

時間限制 1000 ms 記憶體限制 65536 kb 提交數 312 通過數 139 小明喜歡滑雪,因為滑雪的確很刺激,可是為了獲得速度,滑的區域必須向下傾斜,當小明滑到坡底,不得不再次走上坡或等著 來載他,小明想知道在乙個區域中最長的滑坡。滑坡的長度由滑過點的個數來計算,區域由乙個二維陣列給出,...

記憶化搜尋 DP 滑雪

description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 ...

滑雪 dp 記憶化搜尋

給定乙個r行c列的矩陣,表示乙個矩形網格滑雪場。矩陣中第 i 行第 j 列的點表示滑雪場的第 i 行第 j 列區域的高度。乙個人從滑雪場中的某個區域內出發,每次可以向上下左右任意乙個方向滑動乙個單位距離。當然,乙個人能夠滑動到某相鄰區域的前提是該區域的高度低於自己目前所在區域的高度。下面給出乙個矩陣...