食 雪 漢
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
/*
param x : 當前位置的 x 座標
param y : 當前位置的 y 座標
return : 從 (x, y)出發,可以滑行的最長長度
*/intgo(
int x,
int y)
;// up
if(a[x]
[y]> a[x-1]
[y])
// down
if(a[x]
[y]> a[x+1]
[y])
// left
if(a[x]
[y]> a[x]
[y-1])
// right
if(a[x]
[y]> a[x]
[y+1])
// 四個方向選最大的
#define maxh 11451
int max =
-maxh;
for(
int i=
0; i<
4; i++)}
return
(max +1)
;}
一般認為選取高度最大的點往下滑,會有最大長度,但是事實上,即使不是從高度最大的點開始滑,可能下滑的長度會大於從最大高度的點開始下滑的長度,也就是說,所有點我們都要滑一次而事實上,通過查閱後台資料,發現這個樣例就是這樣的:
如果只從最高點開始滑,長度是4,但是最大的滑行長度其實是8
8 839 48 49 38 47 46 45 59
28 22 39 38 49 44 31 10
27 48 49 38 51 52 35 10
26 26 26 38 26 26 26 26
26 26 26 38 26 26 26 26
24 45 58 38 56 55 38 13
23 44 43 38 41 40 39 14
22 22 39 38 49 44 31 10
#include
#include
using
namespace std;
#define maxlen 12
#define maxh 11451
int a[maxlen]
[maxlen]
;int r, c;
/*param x : 當前位置的 x 座標
param y : 當前位置的 y 座標
return : 從 (x, y)出發,可以滑行的最長長度
*/intgo(
int x,
int y)
;// up
if(a[x]
[y]> a[x-1]
[y])
// down
if(a[x]
[y]> a[x+1]
[y])
// left
if(a[x]
[y]> a[x]
[y-1])
// right
if(a[x]
[y]> a[x]
[y+1])
int max =
-maxh;
for(
int i=
0; i<
4; i++)}
return
(max +1)
;}intmain()
} cin>>r>>c;
for(
int i=
1; i<=r; i++)}
int max =
-maxh;
for(
int i=
1; i<=r; i++)}
} cout
}
藍橋杯 演算法提高 最長滑雪道 (遞迴)(C )
樣例輸入 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思路 從題目中 乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小 這句話切入。可以知道,每次在某乙個點都需要比較其上下左右四...
藍橋杯 試題 演算法提高 最長滑雪道
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 該題目比較簡單,只需要按照題意進行模擬,計算每一點出發可以走的最長路線,並進行比較保留最長路線值。需要注意的是,不一定從最大值出發的路線會是最長路線,可能會存在...
藍橋杯 數字黑洞 遞迴解法
任意乙個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律 1 將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數 2 將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數 如果四個數中含有0,則得到的數不足四位 3 求兩個數的差,得到乙個新的四位數...