洛谷 P1434 滑雪 dfs 記憶化搜尋

2021-10-07 21:40:56 字數 1013 閱讀 1174

記憶化搜尋:和斐波那契數列一樣搜尋過的直接用陣列打表儲存下來,記錄下來。

首先,這題為什麼會想到記憶化?

在dfs每種情況是,可能這個點之前已經搜過了,沒必要再去搜尋了,因此不如儲存記住,就沒必要再去dfs了。

本題的主要思路:

先去想dfs怎麼做:

這題每個點出發有可能,所以我們每個點都要開始dfs,最後取他們的最大值。

3 3

1 1 3

2 3 4

1 1 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

#include

#include

#define maxn 101

using

namespace std;

int m,n;

int a[maxn]

[maxn]

;int b[maxn]

[maxn]

;int dx=

;int dy=

;int ans;

intjudge

(int x,

int y)

void

dfs(

int x,

int y)

} ans=

max(ans,b[x]

[y]);}

intmain()

for(

int i=

0;icout

}

洛谷P1434 滑雪 記憶化搜尋

題目 題意 給乙個矩陣,矩陣中的數字代表海拔高度。現在要找一條最長路徑,使得路徑上的海拔是遞減的。思路 如果從點 i,j 出發的最長遞減路徑已知 假設是s 那麼如果從點 x,y 可以到達點 i,j 路徑s一定也包含在從點 x,y 出發的最長遞減路徑中。因此我們用乙個陣列記錄從某一點開始的最長遞減路徑...

洛谷 P1434 滑雪

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

洛谷 p1434 滑雪

洛谷 p1434 滑雪 1.附上70分 include include int a 100 10 100 10 int vis 100 10 100 10 int r,c int next 2 上 下 左 右 int max 0 void dfs int step,int r1,int c1 int...