【問題描述】
自定義函式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...