poj 滑雪 記憶性動態規劃

2021-09-12 12:26:16 字數 873 閱讀 5990

5 5

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

從任意一點出發,可以滑行的最長距離.(從高往低走)

思路:列舉每乙個點 a(i,j) 初始時設定len[i][j] = 0

從這個點上下左右四個方向走一下,找到最大的那個+1,就是我的最大距離了.如果這個點周圍都比我大,我就是1,將這個點初始化好,若遇到這個點的len[i][j] != 0 直接返回值就好

// poj 滑雪.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include #include using namespace std;

const int maxn = 110;

int h[maxn][maxn];

int len[maxn][maxn];

int r,c;

int s[4][2] = ,,,};

void dp(int x,int y)

int maxlen = 0;

for(int i = 0;i<4;i++)else

continue;

} len[x][y] = maxlen+1;

}int _tmain(int argc, _tchar* ar**)

} int maxl = 0;

for(int i = 0;i} printf("%d\n",maxl);

system("pause");

return 0;

}

記憶性遞迴

初學者一般都會在斐波那契數列那裡學到遞迴,但其實如果計算斐波那契數列達到40以上的時候,普通的遞迴會很慢。例如計算第40位的斐波那契數,普通的遞迴花費大約2s,而記憶性遞迴則需1s就可完成計算。原因在於普通的遞迴計算f 5 時需要計算f 4 f 3 計算f 4 時還需要計算f 3 f 2 但是計算f...

記憶性遞迴

遞迴有時候會出現重複計算的情況 如下例題 因此為了提高 效率,就需要進記憶性遞迴 即只對第一次出現的新資料進行計算並進行儲存,而對於已經計算過的結果,只需將結果取出即可。它可以提高效率,避免計算機進行重複已做過的完全相同的工作而降低效率 例1 要求找出具有下列性質數的個數 包含輸入的自然數n 先輸入...

記憶性遞迴

斐波那契數列指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 1,f 2 1,f n f n 1 f n 2 n 3,n n 1.普通斐波那契數列解法 1 include2 include3 using namespace std ...