POJ1088滑雪(入門級DP)

2021-07-03 22:04:15 字數 1334 閱讀 4799

儘管是比較簡單的dp,但是很經典,記憶化搜尋加dp,找出狀態轉移方程很容易寫出來。

寫出後成就感滿滿啊~雖然不是純原創......以前看過別人的思路

不多說帖**!

michael喜歡滑雪這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子

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

乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。在上面的例子中,一條可滑行的滑坡為24-17-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。

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 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

sample output

25

#include#include#includeusing namespace std;

int points[100][100];

int maxlen[100][100]=;

int row,col;

int i,j;

int dp(int i,int j)

{ int max=0;

if(maxlen[i][j]>0)return maxlen[i][j];

//檢查這個點是否被處理過,若是則f[i][j]>0直接返回,記憶化搜尋

//向上

if(j>0&&points[i][j]>points[i][j-1]&&maxpoints[i][j+1]&&max0&&points[i][j]>points[i-1][j]&&maxpoints[i+1][j]&&max

POJ1088 滑雪(簡單dp

題目要求 乙個人可以從某個點滑向上下左右相鄰四個點之一,當且僅當高度減小。求可以滑落的最長長度。題目解析 首先要先排一下序,因為只能高度遞減才能滑行。之後就很簡單了,就是簡單dp。即 要求的滑坡是一條節點遞減並依次相鄰的最長路徑,可以先根據高度將所有的點進行排序,在i點的時候,遍歷0 i 1個點 公...

POJ1088 滑雪 DP,查表法

dp 查表法 查表法的前提 1.不能迴圈查詢 例如,本題目 查詢dp i,j 需要在內部查詢dp i j 可能繼續進行遞迴,但因為遞迴過程總是沿著海拔降低,故不可能回過頭來再次查詢dp i,j 2.正確處理遞迴 查表 終止條件 本題中,如果點 i,j 旁邊沒有低於它的點,則len i j 為0,直接...

POJ 1088 滑雪 (深搜 DP)

題目描述 input 第一行輸入兩個數n,m代表滑梯範圍行n和列m 1 n,m 100 下面是n行,每行有m個整數,代表高度h,0 h 20000 output 輸出乙個值,代表glory能夠在滑滑梯上面滑行的最長長度是多少 sample input 3 39 1 2 5 6 7 8 4 3 sam...