POJ 1088 滑雪 解題報告

2021-05-23 11:03:42 字數 1655 閱讀 5996

poj 1088

滑雪解題報告

【正文】

description

michael

喜歡滑雪百這並不奇怪,

因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。

michael

想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子

1234 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

。當然25-24-23-...-3-2-1

更長。事實上,這是最長的一條。

input

輸入的第一行表示區域的行數

r和列數

c(1 <= r,c <= 100)

。下面是

r行,每行有

c個整數,代表高度h,

0<=h<=10000。

output

輸出最長區域的長度。

sample input

5 5

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

sample output25

【演算法分析】

額,動態規劃的經典題,或者說是水題。其實就是找出每個狀態點的最長,然後找出最長即可。

狀態:h[i][j]

狀態轉移方程:

if(四面都比當前狀態點高

)h[i][j]=1;

else h[i][j]=1+max;

其中用到了遞迴和記憶化搜尋,因為他的搜尋是上下左右同時搜尋的,所以可能會搜尋到我們沒有走到的點。用了遞迴可以直接呼叫。

記憶化搜尋減少了時間複雜度,不會走重複的點。

【**】

#include

#include

#define

max 10000

inta[max][110],h[max][110];

inthi(int i,int j)

intmain()

for(j=1;j<=c;j++)

memset(h,-1,sizeof(h));

for(i=1;i<=r;i++)

for(j=1;j<=c;j++)

h[i][j]=hi(i,j);

//狀態轉移

for(i=1;i<=r;i++)

for(j=1;j<=c;j++)

if(as

printf("%d/n",as);

return 0; }

滑雪 poj1088 解題報告

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

poj1088 滑雪 解題報告

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

POJ 1088 解題報告

按照的順序刷,果然輕鬆愉快。這道題就是dfs,同時記錄結果避免重複。做完後看了看解法,大致如此,大同小異,表示對poj上0ms過的很驚奇,不知如何做到的。1088 accepted 336k 63ms c 1683b id thestor1 lang c task poj1088 include i...