DP II
DP II
Why DP?
● DP is a very common technique in OI
How to DP?
● Solve subproblems
Table of Contents
● DAG
● Tree DP
● Bitwise DP
● Memory optimization
Dynamic Programming (II) 5
● States
IDs of subproblems
● Transition formula
Using results of subproblems to find the answer
Dynamic Programming (II) 8
DAG
● Directed Acyclic Graph
● Node = State
● Edge = Transition
DAG
2
1
5
4
3 7
6
Dynamic Programming (II) 10
DAG States
2
1
5
4
3 7
Transitions
6
Dynamic Programming (II) 11
DAG
● DAG is usually applied with topological sort to determine the DP order
2
1
5
4
3 7
6
Dynamic Programming (II) 12
DAG
● DAG is usually applied with topological sort to determine the DP order
1 2 3 4 5 6 7
Dynamic Programming (II) 13
Topological Order
Dynamic Programming (II) 15
Topological Order
Dynamic Programming (II) 16
Topological Order
Dynamic Programming (II) 17
Topological Order
Dynamic Programming (II) 18
Topological Order
H
Dynamic Programming (II) 19
Topological Order
F H
Dynamic Programming (II) 20
Topological Order
F H
Dynamic Programming (II) 21
Topological Order
G F H
Dynamic Programming (II) 22
Topological Order
G F H
Dynamic Programming (II) 23
Topological Order
E G F H
Dynamic Programming (II) 24
Topological Order
C E G F H
Dynamic Programming (II) 25
Topological Order
C E G F H
Dynamic Programming (II) 26
Topological Order
C E G F H
Dynamic Programming (II) 27
Topological Order
C E G F H
Dynamic Programming (II) 28
Topological Order
B C E G F H
Dynamic Programming (II) 29
Topological Order
D B C E G F H
Dynamic Programming (II) 30
Topological Order
A D B C E G F H
Dynamic Programming (II) 31
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: A
D F
in=1 G in=1
in=2
Topological Order
Dynamic Programming (II) 33
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: A A
D F
in=1 G in=1
in=2
Topological Order
Dynamic Programming (II) 34
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: A
D F
in=1 G in=1
in=2
Topological Order
A
Dynamic Programming (II) 35
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=2
Topological Order
A
Dynamic Programming (II) 36
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: D A
D F
in=0 G in=1
in=2
Topological Order
A
Dynamic Programming (II) 37
in=1
DAG - Topological Sort in=1
B in=1 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=2
Topological Order
A D
Dynamic Programming (II) 38
in=1
DAG - Topological Sort in=0
B in=1 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=1
Topological Order
A D
Dynamic Programming (II) 39
in=1
DAG - Topological Sort in=0
B in=1 E
in=0 H in=2
C
S: B A
D F
in=0 G in=1
in=1
Topological Order
A D
Dynamic Programming (II) 40
in=1
DAG - Topological Sort in=0
B in=1 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=1
Topological Order
A D B
Dynamic Programming (II) 41
in=1
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=1
Topological Order
A D B
Dynamic Programming (II) 42
in=1
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: C A
D F
in=0 G in=1
in=1
Topological Order
A D B
Dynamic Programming (II) 43
in=1
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: A
D F
in=0 G in=1
in=1
Topological Order
A D B C
Dynamic Programming (II) 44
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: A
D F
in=0 G in=0
in=0
Topological Order
A D B C
Dynamic Programming (II) 45
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: E, F, G A
D F
in=0 G in=0
in=0
Topological Order
A D B C
Dynamic Programming (II) 46
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=2
C
S: F, G A
D F
in=0 G in=0
in=0
Topological Order
A D B C E
Dynamic Programming (II) 47
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=1
C
S: F, G A
D F
in=0 G in=0
in=0
Topological Order
A D B C E
Dynamic Programming (II) 48
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=1
C
S: F, G A
D F
in=0 G in=0
in=0
Topological Order
A D B C E
Dynamic Programming (II) 49
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=1
C
S: G A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F
Dynamic Programming (II) 50
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: G A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F
Dynamic Programming (II) 51
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: G, H A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F
Dynamic Programming (II) 52
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: H A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F G
Dynamic Programming (II) 53
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: H A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F G
Dynamic Programming (II) 54
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F G H
Dynamic Programming (II) 55
in=0
DAG - Topological Sort in=0
B in=0 E
in=0 H in=0
C
S: A
D F
in=0 G in=0
in=0
Topological Order
A D B C E F G H
Dynamic Programming (II) 56
A C E
D G F
dp = 1 dp = 1 dp = 3
Dynamic Programming (II) 60
break;
Dynamic Programming (II) 63
Tree
2
● A special case of DAG 1 5
(if it is rooted)
6 8
Tree rooted
at node 1
Dynamic Programming (II) 65
6 8
● Subtree
Dynamic Programming (II) 66
Tree DP
● Given a rooted tree - easier
Tree DP
● Assume a tree is rooted
6
Dynamic Programming (II) 73
Tree DP - Summary
● Rooted tree
● DFS from root
● Recursively calculate answers of the children
● Calculate answer for this node
● May require traveling several times to precompute different values
● Subtree size / sum of subtree / height / …
Dynamic Programming (II) 80
break;
Dynamic Programming (II) 81
Bitwise DP
● Using bitmask as some states of the dp
Bitwise DP - State
● Example 1 (assume the followings are light bulbs):
0 1 2 3 4 5 6 7
● Treating the lit bulbs as 1, unlit bulbs as 0, this state can be represented
by bitmask 011010012 = 20 + 23 + 25 + 26
● We corresponds the i-th bit (counting from right to left) with the i-th light
bulb. In this order, the bitmask can be calculated by Σ2i for i-th bulb being
lit
Dynamic Programming (II) 83
Bitwise DP - State
● Example 2 (0-1 Knapsack Problem):
● Given N items with weight wi and value vi, you may pick a subset of items
such that their total weight ≤ K. Find the maximum total value of items
picked
● As with the previous example, each subset can be represented by a
bitmask (i-th item ↔ i-th bit), and can be fitted into a dp state
Bitwise DP - Transition
● Given N light bulbs (N ≤ 15), M buttons, each toggles (on → off, off → on)
a set of light bulbs (Bi - in bitmask form) when pressed (M ≤ 30)
● Find minimum number of times of pressing the buttons to achieve a given
state (K) Or output ”impossible”
Dynamic Programming (II) 87
Bitwise DP - Transition
● Given N light bulbs (N ≤ 15), M buttons, each toggles (on → off, off → on)
a set of light bulbs (Bi - in bitmask form) when pressed (M ≤ 30)
● Find minimum number of times of pressing the buttons to achieve a given
state (K) Or output ”impossible”
Bitwise DP - Transition
● For each button, either choose to press it, or not press it
● dp[i][bitmask]: Considering only button 1 to i, the minimum number
of presses needed to achieve the light bulb state in bitmask
● 1 ≤ N ≤ 16
Dynamic Programming (II) 90
● Transition:
for each column j
if (bitmask & (1 << j) == 0)
dp[i][bitmask + (1 << j)] = max(dp[i][bitmask + (1 << j)],
dp[i - 1][bitmask] + a[i][j])
● Answer: dp[N][2N - 1]
● Time complexity: O(N2 * 2N)
Dynamic Programming (II) 91
I0011 Palindrome
T003 Scheduling Lectures
I0721 Miners
Dynamic Programming (II) 102
Additional Readings
● SOS Dynamic Programming [Tutorial] - Codeforces
● [Tutorial] Non-trivial DP Tricks and Techniques - Codeforces