michael喜歡滑雪百 這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個 區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子
1 2 3 4 5乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
輸入的第一行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0<=h<=10000。例子:
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
25解題思路:
動態規劃+貪婪演算法 遞迴演算法求乙個點的最大長度,先求相鄰點的最大長度
/*view code*description
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更長。事實上,這是最長的一條。
input
輸入的第一行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,
0<=h<=10000。
output
輸出最長區域的長度。
sample input
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
sample output
25*/
#include
#include
#define n 100
int map[n][n],len[n][n]; //
map存放點高度資訊,len存放對於點可以滑的最大長度
int n=0,m=0; //
n表示圖行數,m表示圖的列數
int max=0; //
整個圖的最大長度
//獲得 map[a,b] 點的最大長度,順帶算出目前整個圖中最大長度
int search(int a,int
b);//
動態規劃+貪心演算法
intmain()
memset(len,
0,sizeof(len)); //
初始化各個點的最大長度
for(i=0;i)
for(j=0;j)
printf(
"%d\n
",max);
}return0;
}int search(int a,int
b) //左
if(b-1>=0&&map[a][b] > map[a][b-1
]) //右
if(b+1
map[a][b+1
]) //下
if(a+1
map[a+1
][b])
len[a][b] = max+1
;
if(max
max =len[a][b];
return
len[a][b];
}
演算法實踐 滑雪
michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 16 17 ...
poj 1088 小白演算法練習 滑雪 dfs記憶化
滑雪 time limit 1000ms memory limit 65536k total submissions 98816 accepted 37530 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...
動態規劃練習一 26 30滑雪(dp)
1 題意 矩陣內,只能從大的數到相鄰小的數,求其最大的長度 2 思路 每個位置儲存從四周到此位置的最大長度,首先要判斷是否是四周的數較大,對於每個位置求出的值儲存起來,防止重複運算,浪費時間,最後比較,輸出最大值 3 感想 老師上課講過 雖然印象比較模糊了,結合動態規劃套路,做出了此題,有所收穫 4...