思路:也是看了後面的題解才理解和學會這個演算法,這是一道記憶化搜尋的好題,因為題目描述了後面的數會非常大,所以我們不可能每個數字都去進行一次遞迴,我們可以將已經計算過的數字儲存起來,當我們要用到它時,判斷它是否已被記錄,如果已被記錄那麼我們就直接返回裡面儲存的值即可:
上**:
#include
using
namespace std;
#define ll long long
ll f[25]
[25][
25];//用乙個三維陣列來儲存,不用把他想得太抽象話,只要把他想象成對應的三位數裡面儲存的結果即可
bool vis[25]
[25][
25];//記憶化搜尋,如果搜過的數字就將他標記為已搜尋,然後直接返回裡面儲存的值即可
ll a,b,c;
//三個數字,因為會比較大記得開longlong
ll mw
(ll a,ll b,ll c)
else
vis[a]
[b][c]
=true
;//當前三位數字搜尋完了就將他們標記為已搜尋
return f[a]
[b][c]
;//返回結果即可
}int
main()
else
}return0;
}
洛谷P1464 Function 記憶化搜尋
對於乙個遞迴函式w a,b,c w a,b,c 如果a le 0a 0 or b le 0b 0 or c le 0c 0就返回值11.如果a 20a 20 or b 20b 20 or c 20c 20就返回w 20,20,20 w 20,20,20 如果a absi2011 比如 w 30,1,...
洛谷 P1464 Function 記憶化搜尋
p1464 function 提交對於乙個遞迴函式w a,b,c w a,b,c 如果a le 0a 0 or b le 0b 0 or c le 0c 0就返回值11.如果a 20a 20 or b 20b 20 or c 20c 20就返回w 20,20,20 w 20,20,20 如果a ab...
記憶化搜尋
演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...