上樓梯問題:一次只能走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 對元...