執行時間跟複雜度大概可以對應到下面這張圖
$$F_n = F_{n-1} + F_{n-2}$$ $$F_1 = F_2 = 1$$
求 \(F_n\)
複雜度是 \(O(F_n)\)
從一般項可知這是指數級的複雜度
int fib(int n){
if (n == 1 or n == 2) return 1;
else return fib(n-1) + fib(n-2);
}
從 \(F_3\) 開始算,一路算到 \(F_n\)
每天有三件事可以做,第 \(i\) 天做分別獲得 \(a_i, b_i, c_i\) 快樂度
連續兩天不能做相同的事
\(n\) 天下來最多可以獲得多少快樂度
給定一個整數序列
求出最大的某一段區間的和
有 \(n\) 個東西分別重 \(w_i\) 要合併為一個
每次可以取兩個東西合併,合併完的重量為兩者相加
花費則是合併完的重量
最少需要多少花費才能全部合而為一
有許多線段,你必須選擇一組不重疊的線段
並使選到的線段越多越好
有些 Greedy 題的結論就是按照某種規則排序就好了
\(1 \sim 100\) 間有個神祕數字
每次可以猜一個數字
你會得到神秘數字大於、等於、或小於猜的數字
最佳策略下最多要猜幾次才會得到答案
Ans:
\(\lfloor \log_2(100) \rfloor\)
找到大於等於 \(x\) 的第一個數
int i = lower_bound(a, a+n, x) - a;
若改為upper_bound則是大於 \(x\) 的第一個數
筆直的道路上有 \(n\) 個服務點
可以在任何點架設服務範圍為 \(r\) 的基地台
在只能設置 \(k\) 個基地台的情況下
\(r\) 至少需要是多少
void solve(int L, int R){
if (L == R) return;
int m = (L + R) / 2;
solve(L, m);
solve(m+1, R);
/*
do stuff
*/
}
\((1, 7, 8, 3, 4, 5, 6, 2)\)
\(\rightarrow (1, 7, 8, 3), (4, 5, 6, 2)\)
\(\rightarrow (1, 7), (8, 3), (4, 5), (6, 2)\)
\(\rightarrow (1), (7), (8), (3), (4), (5), (6), (2)\)
\(\rightarrow (1, 7), (3, 8), (4, 5), (2, 6)\)
\(\rightarrow (1, 3, 7, 8), (2, 4, 5, 6)\)
\(\rightarrow (1, 2, 3, 4, 5, 6, 7, 8)\)