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