演算法的錄課可以以大知識點為一門課程,比如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)
51311 8
12 7 26
6 14 15 8
12 7 13 24 11
a、回溯就是題目的描述是怎麼,你直接簡單粗暴的照著描述寫回溯就好,比如數字金字塔是求頂到底最大路徑和,那麼你直接頂到底這樣逐層回溯就好,可深搜,也可廣搜,
b、回溯優化的話記得剪枝和記憶化遞迴(儲存中間狀態)
c、回溯講的話可以畫出決策樹回溯就是題目的描述是怎麼,你直接簡單粗暴的照著描述寫回溯就好,比如數字金字塔是求頂到底最大路徑和,那麼你直接頂到底這樣逐層回溯就好,可深搜,也可廣搜,
51311 8
12 7 26
6 14 15 8
12 7 13 24 11
最短路也就是點到點的最短距離,那我就按照題目描述從點到點回溯即可,遞迴就是每乙個點的選擇情況a、條件:相鄰兩個數構成素數,並且數沒有被用(所以可以用乙個陣列來記錄數是否被用了)
b、儲存:乙個陣列存數有沒有被用,乙個陣列存結果
c、遞迴:遞迴也就是每乙個位置的取數情況:也就是每乙個位置的選擇情況
1 #include2 #include3 #include4 #include5using
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 近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。目前所見動態規劃可以劃分為兩類 鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。一 鏈式動態規劃 鏈式動態規劃的題...