在dp的方面,記憶化搜尋感覺不如遞推好用,這是肯定的,但有些時候dp的轉移過程過於複雜很難求解乙個問題的時候其子問題都解決了,所以這個時候可以用記憶化搜尋來解決
記憶化搜尋因為可以將已經求解的問題儲存起來,所以求解非常快,這個方法的基本思想就是由下到上求解,先遞迴到最底層,然後層層向上去解決這個問題,在這中間會有重疊子問題,大大加快了求解過程,可以用memset 將dp的值全部設定為-1 表示不知道值的子問題 dp[x][y]>=0表示在x y點的最優解已經求解出來了。
例題 hdu1078
#include #include #include #include #include #include #include #include #include #include using namespace std;
int mat[105][105];
int dp[105][105];
int dx[4]=;
int dy[4]=;
int n,k;
int check(int x,int y)
int search(int x,int y)}}
if(mark==0)
dp[x][y]=mat[x][y];
else
dp[x][y]=maxx+mat[x][y];
}return dp[x][y];
}int main()
search(0,0);
cout<
記憶化搜尋簡介
記憶化搜尋 演算法上依然是搜尋的流程,但是搜尋到的一些解用動態規劃的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,...
記憶化搜尋
演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...
記憶化搜尋
記憶化搜尋 演算法上依然是搜尋的流程,但是搜尋到的一些解用動態規劃的那種思想和模式作一些儲存。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求解乙個狀態,就將它的解儲存下來,以後再次遇到這個狀態的時候,就不必重新求解了。例1.題目描述 給從左至右排好隊的小朋友們分糖果,要求 1.每個小朋友都...