Advanced
Dynamic Programming
Tossaporn Saengja
SiData+, Faculty of Medicine, Siriraj Hospital
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AI tricks
Donโt believe every output from LLM โ always verify, you should be smarter than an LLM
Tossaporn Saengja
Advanced DP
ChatGPT 4o
Tossaporn Saengja
Advanced DP
ChatGPT 4o
โ personalized
Tossaporn Saengja
Advanced DP
ChatGPT 4o
โ clarification
Tossaporn Saengja
Advanced DP
ChatGPT 4o
โ clarification
Tossaporn Saengja
Advanced DP
Claude Sonnet 3.7
โ translation
Tossaporn Saengja
Advanced DP
Perplexity
โ search
Tossaporn Saengja
Advanced DP
AI tricks
Donโt believe every output from LLM โ always verify, you should be smarter than an LLM
We might be at the point of generating content is easier than verifying content โ be extra careful with content on the internet
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AlphaGeometry
from https://www.youtube.com/watch?v=TuZhU1CiC0k
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AlphaGeometry
from https://www.youtube.com/watch?v=TuZhU1CiC0k
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AlphaGeometry
from https://www.youtube.com/watch?v=TuZhU1CiC0k
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AlphaGeometry
from https://www.youtube.com/watch?v=TuZhU1CiC0k
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
AlphaGeometry
from https://www.youtube.com/watch?v=TuZhU1CiC0k
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
Tossaporn Saengja
Advanced DP
from https://www.youtube.com/watch?v=qTE1OSUNR3w
Tossaporn Saengja
Advanced DP
Convex Hull
from https://codeforces.com/blog/entry/63823
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
The Intuition
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
void insert(int l, int r, Line seg, int o=0) {
if(l + 1 == r) {
if(seg(l) > a[o](l)) a[o] = seg;
return;
}
int mid=(l + r) >> 1, lson = o * 2 + 1, rson = o * 2 + 2;
if(a[o].m > seg.m) swap(a[o], seg);
if(a[o](mid) < seg(mid)) {
swap(a[o], seg);
insert(l, mid, seg, lson);
}
else insert(mid, r, seg, rson);
}
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree
from https://robert1003.github.io/2020/02/06/li-chao-segment-tree.html
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
(2, 3)
Tossaporn Saengja
Advanced DP
(2, 3)
void insert(int l, int r, Line seg, int o=0) {
if(l + 1 == r) {
if(seg(l) > a[o](l)) a[o] = seg;
return;
}
int mid=(l + r) >> 1, lson = o * 2 + 1, rson = o * 2 + 2;
if(a[o].m > seg.m) swap(a[o], seg);
if(a[o](mid) < seg(mid)) {
swap(a[o], seg);
insert(l, mid, seg, lson);
}
else insert(mid, r, seg, rson);
}
Tossaporn Saengja
Advanced DP
(2, 3)
void insert(int l, int r, Line seg, int o=0) {
if(l + 1 == r) {
if(seg(l) > a[o](l)) a[o] = seg;
return;
}
int mid=(l + r) >> 1, lson = o * 2 + 1, rson = o * 2 + 2;
if(a[o].m > seg.m) swap(a[o], seg);
if(a[o](mid) < seg(mid)) {
swap(a[o], seg);
insert(l, mid, seg, lson);
}
else insert(mid, r, seg, rson);
}
Tossaporn Saengja
Advanced DP
(2, 3)
void insert(int l, int r, Line seg, int o=0) {
if(l + 1 == r) {
if(seg(l) > a[o](l)) a[o] = seg;
return;
}
int mid=(l + r) >> 1, lson = o * 2 + 1, rson = o * 2 + 2;
if(a[o].m > seg.m) swap(a[o], seg);
if(a[o](mid) < seg(mid)) {
swap(a[o], seg);
insert(l, mid, seg, lson);
}
else insert(mid, r, seg, rson);
}
Tossaporn Saengja
Advanced DP
(2, 3)
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
The Intuition
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
f(x) = x-3 , x >= 3 , m=1
3-x , x < 3 , m=-1
f(3) = 0
f(x) = mx + c, f(3) = -3 + c = 0, c=3
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick: WHY?
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick
from https://www.youtube.com/watch?v=p8RxN6Y9OOA
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Plug DP / DP on broken profiles
from https://codeforces.com/blog/entry/90841
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Plug DP / DP on broken profiles
from https://codeforces.com/blog/entry/90841
๐๐[๐][๐][๐๐๐ ๐]: represent the number of possible full tilings of all cells in rows ๐โ1 and earlier, and the first ๐ cells in row ๐, with a plug mask of ๐๐๐ ๐
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Plug DP / DP on broken profiles
from https://codeforces.com/blog/entry/90841
The plug will be 1 (toggled) if there is a domino laid over it, and 0 otherwise.
plugs with states [1,0,1,0,1,0,0,1,0] is ->
So this is ๐๐[3][4][1010100102]
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Divide and Conquer Optimization
Tossaporn Saengja
Advanced DP
from https://cp-algorithms.com/dynamic_programming/divide-and-conquer-dp.html
Tossaporn Saengja
Advanced DP
What It Does
This technique speeds up DP recurrences by narrowing the search space for the optimal decision index. It leverages the monotonicity of the optimal decision opt(i,j) in the recurrence dp(i,j).
The Intuition
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
WQS Binary Search
Tossaporn Saengja
Advanced DP
from https://www.serbanology.com/vault/The%20Trick%20From%20Aliens
Tossaporn Saengja
Advanced DP
What It Does
WQS Binary Search tackles DP problems with extra constraints (like partitioning an array into exactly K segments) by introducing a penalty ฮป for each segment. Tuning ฮป through binary search guides the DP solution toward using exactly K segments.
The Intuition
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Outline
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree: CF923F - Escape Through Leaf
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree: CF923F - Escape Through Leaf
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree: CF923F - Escape Through Leaf
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Convex Hull Optimization
https://codeforces.com/contest/631/problem/E
https://codeforces.com/contest/660/problem/F
https://codeforces.com/contest/311/problem/B
https://codeforces.com/contest/673/problem/E
https://codeforces.com/contest/455/problem/E
https://codeforces.com/contest/1179/problem/D
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Convex Hull Optimization: Solutions
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick: C. Sonya and Problem Wihtout a Legend
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Plug DP: Counting Tilings
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Divide and Conquer Optimization: E. Ciel and Gondolas
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Divide and Conquer Optimization: F. Yet Another Minimization Problem
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
E. Gosha is hunting
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Li Chao Tree: links
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Convex Hull: links
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Slope Trick: links
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Plug DP / DP on broken profiles: links
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
Divide and Conquer Optimization: link
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP
WQS Binary Search: links
DP optimization - WQS Binary Search Optimization | A Simple Blog
Incredibly beautiful DP optimization from N^3 to N log^2 N - Codeforces
Intuition or Motivation Behind Alien's DP Trick - Codeforces
https://www.serbanology.com/vault/The%20Trick%20From%20Aliens
Tossaporn Saengja
Advanced DP
Tossaporn Saengja
Advanced DP