chapter10 分治法 動態規劃 貪心演算法

2021-06-25 12:10:27 字數 1153 閱讀 8385

上樓梯問題:一次只能走1步或2步,上n階樓梯,有幾種上法

斐波那契數列

動態規劃:把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解,

lcs:  i==0||j==0   c[i][j]=0;

i>0 j>0 x[i]=y[j]     c[i][j] = c[i-1][j-1] +1

i>0 j> 0 x[i] != y[j]   c[i][j] = max

#include #include #include int lcs(char *, char *);

int main(int argc, const char *argv)

int lcs(char *s1, char *s2)

}return cnt[len1][len2];

}

編輯距離:

i==0  c[i][j] = j

j==0  c[i][j] = i

s1[i-1] == s2[j-1]   c[i][j] = c[i-1][j-1]

s1[i-1] != s2[j-1]   c[i][j] = min

01揹包問題:

j < c[i]  f[i][j]=f[i-1][j]  -->物體i重量比揹包容量大

max  -->選取放入i和不放入i的最大值  

//01揹包問題,3件物品,揹包容納5kg,物體1重1kg價值60元,物體2重2kg價值100元,物體3重3kg價值120元,怎麼最大化揹包所裝價值
#include #include #include int backbag(int [6], int *, int *, int);

int main(int argc, const char *argv)

; int w[4] = ;

int f[n+1][v+1];

int ret = backbag(f, c, w, n+1);

printf("%d\n", f[n][v]);

return 0;

}int backbag(int p[6], int *c, int *w, int n)

else}}

}



刷題打卡 day10 分治法

從現在開始每天至少刷一道題。題庫 lintcode 題目鏈結 難度 easy 演算法 分治 解題思路 採用分治的思想,先通過遞迴的方式把左右子樹各自翻轉後,再將根節點左右子樹翻轉一下。注意 這裡說不能用遞迴。不用遞迴就徒手寫棧吧。反正遞迴也是通過棧實現 時間複雜度 o logn 空間複雜度 o 1 ...

《演算法導論》 2 3 1分治法

分治法 有很多演算法在結構上是遞迴的 為了解決乙個給定的問題,演算法要一次或多次地遞迴地呼叫其自身來解決相關的問題。這些演算法通常採用分治策略 將原問題劃分為n個規模較小而結構與原問題相似的子總是 遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。分治模式在每一層遞迴上都有三個步驟 分解 d...

演算法(二) 分治法

分治法的適 條件 該問題的規模縮 到 定程度就可以容易地解決。該問題可以分解為若 個規模較 的相同問題 遞迴思想的應 該問題所分解出的各個 問題是相互獨 的,即 問題之間不包含公共的 問題。利 該問題分解出的 問題的解可以合併為該問題的解。案例 快排 1 過程 divide partition 對元...