動態規劃和回溯總結

2022-03-23 17:48:39 字數 2405 閱讀 7869

演算法的錄課可以以大知識點為一門課程,比如dp,比如回溯,比如線段樹,比如最短路等等1、找準狀態:一般問題所問我們就可以設定為狀態

2、找變化**移)關係:也就是找遞推表示式:也就是找動態規劃的狀態轉移方程

3、找好起始狀態和最終狀態

4、找好刷表的順序:也就是每層迴圈的實際意義1、空間換時間

2、刷表(也就是依次把錶填起來)1、找準狀態:求頂到底最大路徑和:f[i][j]表示從頂點到第i行第j列的路徑和最大值

2、找變化**移)關係-【遞推表示式】【狀態轉移方程】:到f[i][j]位置只能由f[i-1][j]和f[i-1][j-1]:f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j]

3、找好起始狀態和最終狀態:起始狀態就是頂點f[1][1],最終狀態就是max(f[n][j])

4、找好刷表的順序:也就是每層迴圈的實際意義:行由上到下(i...1->n),列由左到由(j...1->i)

5

1311 8

12 7 26

6 14 15 8

12 7 13 24 11

a、回溯就是題目的描述是怎麼,你直接簡單粗暴的照著描述寫回溯就好,比如數字金字塔是求頂到底最大路徑和,那麼你直接頂到底這樣逐層回溯就好,可深搜,也可廣搜,

b、回溯優化的話記得剪枝和記憶化遞迴(儲存中間狀態)

c、回溯講的話可以畫出決策樹回溯就是題目的描述是怎麼,你直接簡單粗暴的照著描述寫回溯就好,比如數字金字塔是求頂到底最大路徑和,那麼你直接頂到底這樣逐層回溯就好,可深搜,也可廣搜,

5

1311 8

12 7 26

6 14 15 8

12 7 13 24 11

最短路也就是點到點的最短距離,那我就按照題目描述從點到點回溯即可,遞迴就是每乙個點的選擇情況a、條件:相鄰兩個數構成素數,並且數沒有被用(所以可以用乙個陣列來記錄數是否被用了)

b、儲存:乙個陣列存數有沒有被用,乙個陣列存結果

c、遞迴:遞迴也就是每乙個位置的取數情況:也就是每乙個位置的選擇情況

1 #include2 #include3 #include4 #include5

using

namespace

std;

6bool b[21]=;

7int total=0,a[21]=;

8int search(int); //

回溯過程

9int print(); //

輸出方案

10bool pd(int,int); //

判斷素數

1112

intmain()

1317

int search(int

t)18

26else search(t+1

);27 b[i]=0;28

}29}30

intprint()

3138

bool pd(int x,int

y)39

回溯中的遞迴也就是每乙個位置的選擇情況,拿素數環(1-20擺成素數環)來說,也就是每乙個位置選擇的20種情況

素數環:從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。

1、找準狀態:求裝n件物品的揹包總價值最大:f[i][j]表示裝i件物品的揹包的總價值為j

2、找變化**移)關係-【遞推表示式】【狀態轉移方程】:第i件物品有裝和不裝兩種選擇:f[i][j]=max(f[i-1][j],f[i-1][j-wi]+vi)

3、找好起始狀態和最終狀態:起始狀態就是沒有物品價值也為0,f[0][0],最終狀態就是max(f[n][j])

4、找好刷表的順序:也就是每層迴圈的實際意義:行由上到下(i...0->n),列由左到由(j...0->j)

1 【解法一】設f[i][v]表示前i件物品,總重量不超過v的最優價值,則f[i][v]=max(f[i-1][v-w[i]]+c[i],f[i-1

][v]) ;f[n][m]即為最優解,給出程式:

2 #include3

using

namespace

std;

4const

int maxm = 201, maxn = 31;5

intm, n;

6int

w[maxn], c[maxn];

7int

f[maxn][maxm]; 89

int max(int x,int y) //

求x和y最大值

1011

intmain()

2020 10 01 動態規劃 回溯

框架 初始化 base case dp 0 0 base 進行狀態轉移 for 狀態1 in 狀態1的所有取值 for 狀態2 in 狀態2的所有取值 for dp 狀態1 狀態2 求最值 選擇1,選擇2.509.斐波那契數 var fib function n return cur 322.零錢兌...

連續郵資問題 回溯 動態規劃)

這個程式debug了好長時間.乙個晚上都耗上面了 這個程式實際上每一部分並不複雜,但是動態規劃那邊邊界錯了好長時間。題目 假設國家發行了n種不同面值的郵票,並且規定每張信封上最多隻允許貼m張郵票。連續郵資問題要求對於給定的n和m的值,給出郵票面值的最佳設計,在1張信封上可貼出從郵資1開始,增量為1的...

動態規劃總結

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 12 7 近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。目前所見動態規劃可以劃分為兩類 鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。一 鏈式動態規劃 鏈式動態規劃的題...