SHOI2002 滑雪 動態規劃

2021-09-02 23:36:59 字數 1229 閱讀 7838

輸入的第一行為表示區域的二維陣列的行數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 ...