POJ 1579 記憶遞迴

2021-06-18 06:36:25 字數 663 閱讀 7041

題意:

if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: 

1 if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: 

w(20, 20, 20) 

if a < b and b < c, then w(a, b, c) returns: 

w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) 

otherwise it returns: 

w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)

問題是:如果a,b,c都大於15後,執行時間會非常長,所以遞迴有所改變。

思路:剛開始我也沒做過這種題目,看了discuss才明白要用記憶遞迴的方式,就是用乙個三維的陣列來記憶遞迴的結果,這樣就不會使時間那麼長了,而且很省時……

#include #include #include using namespace std;

int s[50][50][50];

int w(int a,int b,int c)

return 0;

}

poj 1579 遞迴 記憶化搜尋

直接遞迴會重複計算一些值,如題所述會花費很長時間。最好的方法就是用記憶化搜尋,用陣列將值記錄下來,當搜到已經計算過的值時直接使用就行了,避免再一次遞迴計算,這樣會節省很多時間。如下 include using namespace std const int size 21 int map size ...

poj 1579(記憶化搜尋)

consider a three parameter recursive function w a,b,c if a 0 or b 0 or c 0,then w a,b,c returns 1 if a 20 or b 20 or c 20,then w a,b,c returns w 20,20...

POJ 1579 記憶化搜尋

問題描述 自定義函式w a,b,c 如果 a 0 或b 0 或 c 0,則返回結果 1 如果 a 20 或 b 20 或 c 20,則返回結果 w 20,20,20 如果 a b 且 b c,則返回結果 w a,b,c 1 w a,b 1,c 1 w a,b 1,c 否則返回結果 w a 1,b,c...