時間限制:
3000ms | 記憶體限制:
65535kb
難度:5
描述
michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子
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
乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。
輸入第一行表示有幾組測試資料,輸入的第二行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0<=h<=10000。
後面是下一組資料;
輸出輸出最長區域的長度。
樣例輸入
1樣例輸出5 51 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
上圖表示乙個4*4的滑雪場地圖,綠色**代表邊界,為了方便操作,其中存入乙個大於所有滑雪場內高度的資料,這裡假設boundary = 10500。
灰色**為滑雪場內的高度分布,每乙個格仔中,上三角代表該點高度,下三角代表從該點出發的最大路徑長度(初始值為0)。
要找出最大路徑長度,可以對整個地圖中的每個點進行按行從左往右,按列從上向下的順序遍歷。
每個點都要判斷它的上,下,左,右四個方向,分別得到從四個方向出發的路徑長度,找出其中最大的,加1後存入當前點,即為該點的最大路徑長度。
按照上,右,下,左四個方向判斷,對於每個方向都要判斷高度是否小於當前高度,如果小於的話,判斷路徑長度是否為0,如果為0則遞迴到這個方向點,遞迴返回的是路徑長度,如果不為0,則將路徑長度記錄下來,最後在四個方向中找出最大的路徑長度,加1作為該點的最大路徑長度。
#include #define boundary 10500
struct map
ski_map[105][105];
//上,下,左,右四個方向
int direction[4][2] = ;
void init_map(int row_num, int column_num)
} }return ski_map[x][y].maxlength += maxlength;
}int main(void)
} maxlength = length = 0;
for (i=1; i<=row_num; i++)}}
} printf("%d\n", maxlength);
} return 0;
}
NYOJ 10 Skiing 記憶化搜尋
題目的意思是 給你乙個n m的矩陣 讓你從中找出一條最長的遞減序列 能走四個方向 上下左右 這道題需要用到 記憶化搜尋 普通搜尋會超時 記憶化搜尋就是在原本記錄該點是否到過的陣列中儲存一些其他資訊 比如上一次到這個點的序列長度是多少 或者直接在這個陣列中儲存答案 兩種都可以 include incl...
NYOJ 10 skiing 記憶化搜尋)
想著藍橋杯還有20天左右就開始了,計畫是把歷年真題都敲一遍,再把之前寫過的nyoj的題目重新的複習一下,並且就是把所有寫過的題重新的整理到部落格上面來,這是開始的第一篇部落格,接下來我會好好的整理好我的部落格,養成乙個良好的 風格,跟複習習慣,一步一步的成長,慢慢的掙扎,直到有一天,可以以長劍嘯天 ...
NYOJ 10 skiing 深搜和動歸
時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描寫敘述 michael喜歡滑雪百這並不奇怪。由於滑雪的確非常刺激。但是為了獲得速度。滑的區域必須向下傾斜。並且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出...