動態規劃解決北大 ACM 1088 滑雪問題

2021-06-26 17:48:54 字數 2236 閱讀 2376

poj1088

以前一直想搞acm,但一直沒怎麼動,沒技術苦逼研究僧還是找不到工作,所以決心搞acm,小夥伴們和我一起來學習吧。

動態規劃第一題 北大acm 1088滑雪問題

問題描述:

滑雪

time limit:1000ms

memory limit:65536k

total submissions:78013

accepted:28994

description

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動態規劃解題描述:

首先對所有元素排序,設為a1,a2,a3 ,a4,a5,a6….

然後按照公升序順序逐次求每個元素ax的最大長度,針對每個元素對上下左右四個方向的元素與元素ax的高度比較,如果比ax大,放棄,如果比ax小,則ax經過此元素形成長度加一的最長路徑。

**:#include

#include

using

namespace std;/*

*記錄高度值(用於排序) *

記錄位置row col用於尋找周圍元素*/

struct

element ;

/* *記錄高度值和經過此點的最大長度 */

struct

arrnode ;

/* *快排比較函式 */

int compare( const

void * ele1,const

void * ele2)/*

*分別從上下左右四個方向檢視與row行col列元素x相鄰的四個元素

*在四個元素中找高度值小於x並且長度最大的長度賦值給x的長度*/

int around_max_length(int

row, int

col, arrnode * arr,int

arrrow, int

arrcol)

if( (row - 1) >= 0 )

if( (row + 1) < arrrow )

if( (col + 1) < arrcol )

return max;

}int main()

;arr_high[listnum]= arn;

element elet = ;

listele[listnum++]= elet;}}

//快排

qsort(listele,r*c,sizeof(element),compare );

//對有序陣列listele的每個元素依次計算其最大長度記錄於arr_high用於以後計算的子問題的解

for(int k = 0; k < r*c;k++ )

//遍歷陣列arr_high尋找最大長度

int max = 0;

for(int m = 0; m < r*c;m++ )

cout<

int kk;

cin>>kk;

return 0;

}

1088 滑雪(動態規劃)

總時間限制 1000ms 記憶體限制 65536kb 描述michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表...

acm 動態規劃

學習參考 就是倒推 尋找遞推式 難點 然後用陣列將資料計算出來 最後直接呼叫得到答案 01揹包問題 for i 0 i 例題一 洛谷oj 開心的金明 include include using namespace std const int max 100001 long long dp max i...

POJ1088 動態規劃

題目鏈結 這個題目和最長子序列什麼的極為相似。不過之前都是一維,現在變成二維的了。僅此而已。因此我們可以想辦法把它先變成一維的。struct nodea 100 100 5 然後我們可以根據height排序,從最高點開始考慮,有點貪心的意思。和單源最短路徑dijkstra相似。int ma 100 ...