Joe Tsai @ 2020 CSIECamp
紅色總和: 12
藍色總和: 18
max: 3
max: 2
max: 2
max: 4
至少可得4+2
至少可得3+2
簡稱 DP (Dynamic Programming)
滿足以下條件時就是DP登場的時候了!
0
1
3
2
4
5
4
1
5
7
2
4
3
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | 0 |
1 | inf |
2 | inf |
3 | inf |
4 | inf |
5 | inf |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
1 | 4 |
2 | inf |
3 | inf |
4 | inf |
5 | inf |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
4 | |
2 | 5 |
3 | 9 |
4 | inf |
5 | inf |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
4 | |
5 | |
3 | 9 |
4 | 8 |
5 | 12 |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
4 | |
5 | |
3 | 9 |
8 | |
5 | 9 |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
4 | |
5 | |
9 | |
8 | |
5 | 9 |
0
1
3
2
4
5
4
1
5
7
2
1
3
點 | 距離 |
---|---|
0 | |
4 | |
5 | |
9 | |
8 | |
9 |
排序非常常見且實用,例如
排序在資工領域是非常基本&常用的概念
泡沫排序法 (Bubble sort)
Bubble Sort 的方式是從序列的最前面開始,一次比較序列中兩兩相鄰的元素,然後根據大小將它們調換順序,大的移到後面:
規則: 一堆30顆石頭,雙方輪流拿取,一次可以取1/3/4/5顆,拿走最後一顆石頭者獲勝。
考慮現在有n顆石頭,已知情況(顯而易見):
1
3
4
5
我:敗
勝
敵:勝
我:敗
敵:勝
我:勝
敵:敗
我:敗
敵:勝
解法:
對於n顆石頭,考慮n-1, n-3, n-4, n-5顆石頭的勝負情況。只要有任何一個是敵方必敗,則n顆石頭的情況可以必勝。
反之,若所有情況都是敵人必勝,則n顆石頭的情況必敗。
規則: 三堆石頭分別有4/6/8顆,雙方輪流拿取,每次任選一堆拿走任意非零數量的石頭,拿走最後一顆石頭者獲勝。
這種類型的遊戲稱為Nim(粘),有標準解法。
複習一下
二進位
20 (10100)
27 (11011)
複習一下
Xor
1
0
1
0
0
1
1
0
1
1
0
1
1
1
1
想法:
策略:
定理一:
定理二:
2-SAT問題: 想要找到一組 true/false 的分配,使得表達式的結果是 true
2-SAT 問題有快速有效率的解法(對電腦而言),但其解法概念牽扯到更複雜的演算法知識,超過此營隊的範圍....
從 A 走到 P 可以選擇:
相當於
(X0 and Y3) or (X3 and Y0)
化為 2-SAT
(X0 or X3) and (X0 or Y0) and (Y3 or X3) and (Y3 or Y0)
將每個需要達成的目標都表示成 2-SAT 表達式,全部 and 起來就可以解得每一條路的方向!