wenbao與記憶化搜尋

2022-04-17 04:36:00 字數 2811 閱讀 2614

記憶化搜尋:

通俗地講就是搜尋的形式,dp的思想

一些搜尋難以完成,dp的動態轉移方程又不好寫的題,就會用到記憶化搜尋,利用dp記錄路徑(相當於為dfs剪枝)用dfs進行模擬。。

啦啦啦啦啦啦,,,,,,,,,好厲害!!!!!!

@  弱雞**

1 #include 

2 #include 3 #include 4

using

namespace

std;

5int a[4][44], dp[44][44][44][44], num[4

], n;

6bool flag[44];7

int dfs(int

count)

22else

27 num[i] -=1;28

} 29

return dp[num[0]][num[1]][num[2]][num[3]] =sum;30}

31int

main()40}

41 num[0] = num[1] = num[2] = num[3] = 0

;42 cout<0)<44return0;

45 }

@  給定乙個n*n的地圖,最多只能走k步並且保證下乙個點的值大於原來的點,求可以得到的最大值

開始故意用純dfs試了下果然超時。。。。。

垃圾**:

1 #include 2 #include 3 #include 

4using

namespace

std;

5int a[105][105], dp[105][105

], n, m;

6int dir[4][2] = ;

7int dfs(int r, int

c)17}18

}19 dp[r][c] = ma +a[r][c];20}

21return

dp[r][c];22}

23int

main()32}

33 printf("

%d\n

", dfs(0, 0

));34}35

}36return0;

37 }

@  玲瓏杯:::::::

n個球放在m個盒子裡面,要求放最多球的盒子數唯一,(可以放零個球), 求最多的放法

明顯的記憶化搜尋

垃圾**

1 #include 2 #include 

3using

namespace

std;

4#define ll long long

5const ll mod = 998244353

;6 ll dp[505][505], n, m, num = 0;7

ll dfs(ll he, ll qiu, ll ma)

12if(dp[he][qiu]) return

dp[he][qiu];

13 ll mam = 0;14

for(int i = 0; i < ma && i <=qiu; i++)

18 dp[he][qiu] =mam;

19return

mam;20}

21int

main()

28 cout29return0;

30 }

@  啦啦啦啦啦, 1a的感覺真是太爽了!!!可能這就是堅持的理由,,經過拼搏換來的快樂才是最大的快樂!!!!

從(0, 0) 點到(n-1, m-1) 點一共有多少種走法(只可以向右向下走)

1 #include 2

using

namespace

std;

3#define ll long long

4const

int mod = 10000;5

int a[105][105], dp[105][105

], n, m, t;

6int dir[2][2] = ;

7int dfs(int r, int c, int

sum)20}

21}22 dp[r][c] =cot;23}

24return

dp[r][c];25}

26int

main()35}

36 cout<0, 0, a[0][0])<38return0;

39 }

關鍵在於跳的次數不會很大

1 #include "

iostream

"2 #include

3using

namespace

std;45

const

int maxn = 30009;6

int sum[maxn][777

], num[maxn], n, d, num2[maxn];

7bool vis[maxn][777];8

9int dd(int pos, int

l) 20

21int

main()

28 memset(sum, -1, sizeof

(sum));

29 printf("

%d\n

", dd(d, 300

));30

return0;

31 }

只有不斷學習才能進步!

記憶化搜尋

演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...

記憶化搜尋

記憶化搜尋 演算法上依然是搜尋的流程,但是搜尋到的一些解用動態規劃的那種思想和模式作一些儲存。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求解乙個狀態,就將它的解儲存下來,以後再次遇到這個狀態的時候,就不必重新求解了。例1.題目描述 給從左至右排好隊的小朋友們分糖果,要求 1.每個小朋友都...

記憶化搜尋

原文 感謝作者。一.動態規劃 動態規劃 dynamic programming 與 分治思想 有些相似,都是利用將問題分 為子問題,並通過合併子問題的解來獲得整個問題的解。於 分治 的不同之處在 於,對於乙個相同的子問題動態規劃演算法不會計算第二次,其實現原理是將每乙個計算過的子問題的值儲存在乙個表...