藍橋杯 最長滑雪道 遞迴解法

2021-10-02 04:31:48 字數 2177 閱讀 3341

食 雪 漢

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 8

39 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 求兩個數的差,得到乙個新的四位數...