大型補檔計畫
題目鏈結
考慮模擬這個過程。
\(f[i][0 / 1]\) 表示從第 \(i\) 個圍欄的 左/右端點開始往下走,走到原點的最小花費。
轉移很容易想到,就是考慮找到乙個往下走第乙個碰到的圍欄 \(j (j < i)\) (若沒有可以直接走到原點)。
然後 \(f[i][0 / 1] = min(f[j][0 / 1] + d_)\)。考慮快速找到往下走最先遇到的圍欄,就是乙個線段覆蓋動態問題,用線段樹維護即可。
#include #include using namespace std;
const int n = 30005, s = 200005, p = 100001;
typedef long long ll;
int n, m = p * 2, s, l[n], r[n], id[s << 2];
ll f[n][2];
int query(int p, int l, int r, int x)
void change(int p, int l, int r, int x, int y, int v)
int mid = (l + r) >> 1;
if (x <= mid) change(p << 1, l, mid, x, y, v);
if (mid < y) change(p << 1 | 1, mid + 1, r, x, y, v);
}int main()
printf("%d\n", min(f[n][0] + abs(l[n] - s), f[n][1] + abs(r[n] - s)));
return 0;
}
3 29學習計畫
1 背單詞 2 做實驗 1 學工科的課程多了之後,覺得背單詞的時候就和看 或者聽 一樣,可以清清腦子,換換思考方式。2 今天在做模電實驗,單管共射放大電路。我雖然在實驗室半年多了,但是學習的主要部分是軟體,而且硬體也是直接印刷出來的電路板,沒有接觸過通用實驗板 麵包板 通過老師和同學的介紹,還有對實...
3 29leetcode兩數相除
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。整數除法的結果應當截去 truncate 其小數部分,例如 truncate 8.345 8 以及 truncate ...
329 矩陣中的最長遞增路徑
給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 示例 2 輸入 nums 3,4,5 3,...