記憶化搜尋:
通俗地講就是搜尋的形式,dp的思想
一些搜尋難以完成,dp的動態轉移方程又不好寫的題,就會用到記憶化搜尋,利用dp記錄路徑(相當於為dfs剪枝)用dfs進行模擬。。
啦啦啦啦啦啦,,,,,,,,,好厲害!!!!!!
@ 弱雞**
1 #include2 #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 #include4using
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 #include3using
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 2using
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 與 分治思想 有些相似,都是利用將問題分 為子問題,並通過合併子問題的解來獲得整個問題的解。於 分治 的不同之處在 於,對於乙個相同的子問題動態規劃演算法不會計算第二次,其實現原理是將每乙個計算過的子問題的值儲存在乙個表...