輸入的第一行為表示區域的二維陣列的行數r和列數c(1≤r,c≤100)。下面是r行,每行有c個數,代表高度(兩個數字之間用1個空格間隔)。
輸出區域中最長滑坡的長度。
輸入樣例#1:
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
輸出樣例#1:
25隔了很久再做這道題,突然蹦出乙個靈感來
1,將給定的矩陣轉化成為圖,比如說 25 24 就可以連一條25通向24的單向邊
2,按照高度的高低將點排序
3,動態規劃求出最長路徑
狀態轉移方程: f[t
]=ma
x(f[
i]+1
,f[t
])
f[t]=max(f[i]+1,f[t])
f[t]=m
ax(f
[i]+
1,f[
t])獻上醜陋的**
#include
#include
#include
#include
using
namespace std;
const
int m=
200000
;int n,m,head[m]
,cnt;
int mp[
150]
[150
],dp[m]
;struct nodl[m]
;struct nodee[m]
;inline
intid
(int x,
int y)
inline
void
add(
int u,
int v)
inline
bool
cmp(nod a,nod b)
intmain()
}int ans=1;
for(
int i=
1;i<=n*m;i++
)dp[i]=1
;sort
(l+1
,l+n*m+
1,cmp)
;for
(int i=
1;i<=n*m;i++)}
cout
}
洛谷 SHOI2002 滑雪 dp
題目鏈結 題意 給你乙個二維陣列,每個點有乙個權值 山的高度 現在只能從高度高的點往下移動,問最長路徑是多少。思路 dp思想,尋找最優子結構,很容易知道,在乙個點,以這個點為結束點的最長路徑為 以其四周 上下左右 的點為結束點的前乙個點的最大值加一 前提是他的高度大於結束點 本來以為自己親手a掉了,...
洛谷 P1434 SHOI2002 滑雪
michael 喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael 想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 16 1...
洛谷P1434 SHOI2002 滑雪
michael喜歡滑雪。這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道在乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 16 17 ...