解題思路
l(i,j)表示從點(i,j)出發的最長滑行長度。 乙個點(i,j), 如果周圍沒有比它低的點,l(i,j) = 1
否則
遞推公式: l(i,j) 等於(i,j)周圍四個點中,比(i,j)低,且l值最大的那個點 的l值,再加1
轉移方程很容易想到,但是我沒想到的是需要結合dfs,我又不會dfs(什麼都不會),所以一道很簡單的水題都做不出來,看題解的時候有一步不是很懂,就是按高度從小到大排序,想不明白為什麼,但是dp+dfs時不需要排序,所以不知道排序的方法怎麼做的,而且排序的複雜度為n^2,但是dp+dfs應該不是n^2,要比n^2大一點,所以還待需弄懂。
我寫的很挫,所以看別人的**時很難看懂。。。。wuwu~~~
#include #include #include #include #include using namespace std;
#define n 105
int dp[n][n],n,m,a[n][n];
//dp[i][j]表示的是以a[i][j]為開始的最長路徑,
//表示以a[i][j]為結尾的最長路徑也可以,只需dfs稍微改變一下符號
int dfs(int i,int j)
int main()
for( i=1; i<=n; i++)
}cout<
百練1088 滑雪 DP DFS
description michael喜歡滑雪百這並不奇怪,由於滑雪的確非常刺激。但是為了獲得速度,滑的區域必須向下傾斜,並且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每乙個數字代表點的高度。以下是乙個 樣例1 ...
百練 1088 滑雪
一向不喜歡囉裡囉嗦,冗長的 有什麼不合適的地方,還望多指教 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 ...
POJ 百練 1088 滑雪
時間限制 1000ms 記憶體限制 65536kb 描述 michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表...