POJ 1579 記憶化搜尋

2021-09-18 02:11:59 字數 1010 閱讀 9164

【問題描述】

自定義函式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) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) 

【輸入格式】

輸入包含若干個測試資料,每個測試資料一行,分別表示a,b和c的值。

輸入以-1 -1 -1表示結束。

【輸出格式】

若干行,每行依次輸出乙個測試資料對應的函式的返回結果。

【輸入樣例1】

1 1 1

2 2 2

10 4 6

50 50 50

-1 7 18

-1 -1 -1

【輸出樣例1】24

5231048576

1

//ac

//poj 1579

#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

ll num[25][25][25];

ll f(int a,int b,int c)

else if( a>20 || b>20 || c>20 )

else if(a20 || b>20 || c>20)

ans=f(20,20,20);

else

ans=f(a,b,c);

printf("w(%d, %d, %d) = %lld\n",a,b,c,ans);

}return 0;

}

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 遞迴 記憶化搜尋

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

POJ 1579 記憶遞迴

題意 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...