90分**:
#include
#include
using namespace std;
int r,c,m[
105]
[105
],ans=
1,v[
105]
[105];
int dx[5]
=,dy[5]
=;voids(
int x,
int y,
int h,
int l)
//x,y:座標 h:高度 l:長度
intmain()
printf
("%d"
,ans)
;return0;
}
ac**:
#include
#include
#include
using namespace std;
int r,c,m[
105]
[105
],ans=
1,v[
105]
[105];
int dx[5]
=,dy[5]
=;ints
(int x,
int y,
int h,
int l)
//x,y:座標 h:高度 l:長度
return v[x]
[y];
}int
main()
兩份**的思路是一致的,都是對每乙個點進行dfs並更新最大值。
在90分**裡,對於起點不同,終點相同,長度不同的兩條路徑,會對公共部分進行重複遍歷,導致tle;在ac**中,採用了記憶化的搜尋方法優化時間複雜度,在這裡分析其正確性:
(1)由於採用返回值為int的函式進行遍歷,返回值的意義是包含遍歷起點的最長路徑長度,在遍歷時的越界或不合題意情況就應該返回0;
(2)對於每次遍歷,都記載了從該點出發能獲得的最大長度,因此在遍歷被遍歷過的點時,可以直接使用之前所得到的資料;
(3)求max的操作確保了在從某點出發的路徑不止一條時,所記錄的是從該點出發能獲得的 最大 長度。
自我總結:思維還不夠成熟,只能想到暴力,應當多做鍛鍊思維的題目補齊短板。
洛谷 P1434 滑雪
題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...
洛谷 p1434 滑雪
洛谷 p1434 滑雪 1.附上70分 include include int a 100 10 100 10 int vis 100 10 100 10 int r,c int next 2 上 下 左 右 int max 0 void dfs int step,int r1,int c1 int...
洛谷P1434滑雪
題目描述 michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 1...