time limit:1000ms
memory limit:65536k
total submissions:107380
accepted:40919
michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子
1 2 3 4 516 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更長。事實上,這是最長的一條。
輸入的第一行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0<=h<=10000。
輸出最長區域的長度。
sample input
5 5sample output1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
25source
shtsc 2002
有意思的一道題目,dfs 上下左右搜,記錄當前點的最優值。
注意範圍:一開始把高度最低的點設為終點,顯然這樣是不對的,因為可能最後到達次低點的路徑更長,或者到達次次低點的路徑更長。所以終點就是最後不能再滑的點,無需預先找出來標記,最後在總的路徑長度基礎上加一即可。
ac code:
1 #include 2 #include 3 #include 4 #include 5 #include 6#define ll long long int
7#define inf 0x3f3f3f3f
8using
namespace
std;910
const
int maxn = 102;11
intmmp[maxn][maxn];
12int
d[maxn][maxn];
13int
n, m;
14bool ok(int x, int
y)15
19int dfs(int x, int
y)20
27if(ok(x+1, y) && mmp[x+1][y]2832
if(ok(x, y-1) && mmp[x][y-1]3337
if(ok(x, y+1) && mmp[x][y+1]3842
return
d[x][y];43}
4445
intmain()
4654
for(int i = 1; i <= n; i++)
55for(int j = 1; j <= m; j++)
56 ans =max(ans, dfs(i, j));
57 printf("
%d\n
", ans+1
);58
return0;
59 }
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喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...