POJ 1088 滑雪 記憶化搜尋

2022-02-16 05:08:53 字數 2375 閱讀 3107

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

下面是乙個例子 1

2345

1617

1819615

2425207

1423

2221813

1211109

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

input

輸入的第一行表示區域的行數r和列數c(

1<= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0

<=h<=10000

。output

輸出最長區域的長度。

sample input55

1234

5161718196

1524

2520714

2322218

1312

1110

9sample output

25

題意:在給定區域內找出一列遞減的序列,輸出長度即可。

思路:這一題之前寫過兩遍,是利用dfs進行搜尋記錄長度。

注意:記憶化搜尋的本質是遇到已經計算過的點直接返回該值即可,不需要進行標記。但是為啥返回的時候步數不用-1我也不知道。。

先上之前dfs過的**:

1 #include2 #include3 #include

4using

namespace

std;56

intaa,bb;

7int a[110][110];8

int ss[110][110];9

10int dir[4][2]= ,,,};

11int dfs(int x,int

y)1226}

27}28return

ss[x][y];29}

30int

main()

3141}42

43int ans=-1;44

for(int i=0; i)

4551

}52 cout<1

<

53return0;

54 }

view code

另外一種寫法:

由於今天做題目碰到一題需要記錄路徑的,發現用dfs寫再通過回溯好像是沒法實現,所以換了一種寫法寫這道題,但是思路還是和dfs的差不多。

這一題記錄好座標後需要進行排序,一定要排序,不懂得話可以用

2  3

6  5  4 

3  2  1這組例子來測試一下結果

必須要排序,從大到小或者從小到的都可以,控制好後面**的比較就可以了

我的**是從小到大排序,所以在後面實現的時候找的從當前該點出發,找四周小於該點的

因為從小到大比較,所以每個點的狀態都來自於前乙個比它小的點,所以從小到大排序,從大的往小的上面找,有點dp的感覺

1 #include2 #include3 #include4 #include

5using

namespace

std;

6const

int n=110;7

//h減小

8int

dp[n][n];

9int

a[n][n];

10int dir[4][2]=,,,};

1112

13struct

node

14e[n*n];

1920

intcmp1(node xx,node yy)

2124

intmain()

2540

}41 sort(e,e+p,cmp1);//必須要排序,從大到小或者從小到的都可以,控制好後面**的比較就可以了

42//我的**是從小到大排序,所以在後面實現的時候找的從當前該點出發,找四周小於該點的

43//因為從小到大比較,所以每個點的狀態都來自於前乙個比它小的點,所以從小到大排序,從大的往小的上面找,有點dp的感覺

44int

pp,qq,ww;

45int maxx=-1;46

for(int i=0;i)

4760

}61 maxx=max(maxx,dp[pp][qq]);62}

63 printf("

%d\n

",maxx);

64return0;

65 }

POJ 1088 滑雪 記憶化搜尋

滑雪 time limit 1000ms memory limit 65536k total submissions 79619 accepted 29637 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...

POJ 1088 滑雪 記憶化搜尋

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

POJ 1088 滑雪 記憶化搜尋

滑雪 time limit 1000ms memory limit 65536k total submissions 84463 accepted 31618 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...