記憶化搜尋:和斐波那契數列一樣搜尋過的直接用陣列打表儲存下來,記錄下來。
首先,這題為什麼會想到記憶化?
在dfs每種情況是,可能這個點之前已經搜過了,沒必要再去搜尋了,因此不如儲存記住,就沒必要再去dfs了。
本題的主要思路:
先去想dfs怎麼做:
這題每個點出發有可能,所以我們每個點都要開始dfs,最後取他們的最大值。
3 3先去找(1,1)的最長距離,很明顯為11 1 3
2 3 4
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...