ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
DP(Knapsack, Tree DP)
???
junodeveloper
?? ??
? Knapsack
? Tree DP
Knapsack Problem
Knapsack Problem
?? : Wikipedia
Knapsack Problem? ??
? Fractional Knapsack
¨C ??? ?? ? ??
? 0/1 Knapsack
¨C ??? ?? ? ??
¨C Unbounded Knapsack (??? ??? ??)
¨C Bounded Knapsack (??? ??? ??)
Fractional Knapsack
? ??? ????, ?? ??? ??? ?? ?
? ??? ?? ??. ??? ?? ??? ?
?? ??? ?? ?? ??. ?? ?? ?
??? ? ?, ?? ?? ?????
Fractional Knapsack
? Greedy ??
¨C ??	/	??? ? ??? ??? ?????.
¨C ?? ???? ??? ?????.
? ????? O(?????)
0/1 Knapsack
? http://www.spoj.com/problems/KNAPSACK/
0/1 Knapsack
? DP ??
¨C ??[?][?]	: 1 ~ i? ??? ???? ??? ?? j? ??
? ???? ? ??? ???
¨C ??[0][0]	= 	0, 	??[0][?]	=	?¡Þ		(	0	 < 	?	 <= 	?	)
¨C ??[?][?]	=
	9
??[?	¨C 	1][?]		(	?	 < 	? ? )
max	( ??[?	¨C 	1][?], ??[?	¨C 	1][?	¨C 	?[?]]	+ 	?[?])	(	?	 >= 	?[?]	)
????? : O(??) ????? : O(??)
0/1 Knapsack
0/1 Knapsack
? ???? ??(Sliding window) ??
¨C ? ?? ?? swapping?? ?????? ?
?? ??
¨C ?? => 2?? ??? ??
0/1 Knapsack
ii - 1
??[?][?]??[?	¨C 	1][?]
??[?	¨C 	1][?	¨C 	??]
0/1 Knapsack
? ?? ? => ?	%	2, ?? ? => 1	¨C 	?	%	2
0/1 Knapsack
? 2? => ?? ??? ??!
ii - 1
j
ii - 1
j
j ?? ??
0/1 Knapsack
0/1 Knapsack
? ??? ?? 1, 2, ¡­ , ???? ??? 0? ?
?? ??? ????? ??
Unbounded Knapsack
? ??? ??? ?? ??? ??? ??? ??
? ??. ??? ??? ?? ???? ?
?? ??? ???? ?, ?? ??? ?
??? ???. (?, ?? ??? ??? ?
??? ??? ?? ????)
? 1	 <= 	?	 <= 	1000
? 1	 <= 	??, ??	 <= 	1000
? 1	 <= 	?	 <= 	10000
Unbounded Knapsack
? ??[?][?]	: 1	~	?? ??? ???? ?? ??
?? ??? ???? ? ?? ??
? ??[0][0]	= 	0, ??[0][?]	=	?¡Þ	(0	 < 	?	 <= 	?)
? ??[?][?]	= 	max	( ??[?	¨C 	1][?	¨C 	?	 ? 	??]	+	
?	 ? 	??)						(?	 >= 	0)
????? O(??K
)
?? ?? ?? ????
Unbounded Knapsack
? ??[?][?]
= max ?? ?	¨C 	1 ?	¨C 	?	 ? 	?? + 	?	 ? 	??
(? ¡Ý 0)
= max( ?? ?	¨C 	1 ? , 	max( ?? ?	¨C 	1 ?	¨C 	?	 ? 	??
+ 	?	 ? 	??))						(? ¡Ý 1)
= max( ?? ?	¨C 	1 ? , 	max( ?? ?	¨C 	? ?	¨C 	?? ¨C 	?	 ? 	??
+ 	?	 ? 	??) + 	??)			(? ¡Ý 0)
= 	max	( ??[?	¨C 	1][?], ??[?][?	¨C 	??]	+ 	??)
Unbounded Knapsack
? ??[?	¨C 	1][?	¨C 	??]	=> 	??[?][?	¨C 	??]
Unbounded Knapsack
Unbounded Knapsack
Bounded Knapsack
? ??? ??, ??? ?? ??, ??, ??? ??
? ??? ??. ??? ??? ?? ??
?? ??? ??? ???? ?, ?? ?
?? ???? ???.
? 1 ¡Ü 	? ¡Ü 	1000
? 1 ¡Ü 	??, ?? ¡Ü 	1000
? 1 ¡Ü 	?? ¡Ü 	1000
? 1 ¡Ü 	? ¡Ü 	10000
Bounded Knapsack
? (??, ??, ??) => ???? (??, ??, 1)? ??
=> 0/1 Knapsack
? ????? O(W ¡Æ ??)
=> TLE
Bounded Knapsack
? ??	 =	2
	+ 2]
+ 2K
+	¡­	+ 2^
+ 	?
(0 ¡Ü 	?	 < 2^`]
)
? ??, ??, ??
? ????? O(nWlogm)
?	 ?? ? 2
, ?? ? 2
, 1	 , ¡­ , ?? ? ?, ?? ? ?, 1
?	0/1 Knapsack
Bounded Knapsack
Bounded Knapsack
? ?? dp?? ???
? ??[?][?]	= 	max	( ??[?	¨C 	1][?	¨C 	?	 ? 	??]	+
	?	 ? 	??)		(0	 <= 	?	 <= 	??)
? ?? ?? O(???)
? ????? k? ????.
Bounded Knapsack
?? ? ??? ? 2??
??? ??? ? ??
?? ????? dp?? ??
Bounded Knapsack
? ?	 = 	??	 ? ?	 + 	?	(0 ¡Ü r < wi), ?? ? ??
? ??[?][?]
? ?? ?? ? => ? ? ?? ?? ?
= max ?? ? ? 1 ? ? ? ? ?? + ? ? ?? 	(0 ¡Ü ? ¡Ü ??)
= max ?? ? ? 1 ? ? ? ? ?? + ? + ? ? ??
= max ?? ? ? 1 ? ? ? ? ?? + ? ? ? ? ? ? ?? + ? ? ??
Bounded Knapsack
? ? ? ? = ?
? ?(?) = ??[? ? 1][? ? ?? + ?] ? ? ? ??
? ?? [? ? ??, ?]?? f(x)? ??? ?? ???
??
? RMQ? ?? O(logm)???
? ?(deque)? ???? O(1)? ??
?? ? ? = max ?? ? ? 1 ? ? ?? + ? ? ? ? ?? + ? ? ??
	(q ? mi ¡Ü x ¡Ü q)
? ????? O(nW)
Bounded Knapsack
Knapsack ???
? ??/?? ??? ??? ?/?? ?? ?
??? ?? ?? ??
? ?, ?, ?	? ??? ??? ?? dp?? ??
? ??
¨C ?? ?? ?? ?, ?? ?? ? ?? dp? ??
=> meet in the middle
? ? ??? ??? ?? ?? / ??? ??
???
Knapsack ?? ???
? ?(BOJ 7579)
? ??1(BOJ 2293)
? ??2(BOJ 2294)
? ??(BOJ 1226)
? Buying Apples!(SPOJ ABA12C)
? Large Knapsack(SPOJ LKS)
Tree DP
Tree DP ??
? ?? ???? ?? ?? ???? ??
????? ?? ??? ?
? ?? ?? = ?? ??
Tree DP
v
w1 w2 wn. . .
dp[v]
dp[w1] dp[w2] dp[wn]
Tree DP
v1 . . .
dp[v1]
vm
dp[vm]
Root
.
.
.
.
.
.
.
.
.
dp[root]
Tree DP
v1 . . .
dp[v1][a1]
vm
dp[vm][a1]
Root
.
.
.
.
.
.
.
.
.
dp[root][a1]
Tree DP
v1 . . .
dp[v1][a1]..[an]
vm
dp[vm][a1]..[an]
Root
.
.
.
.
.
.
.
.
dp[root][a1]..[an]
Tree DP? ?? ??
? ??? DP ?? ????.
? ?? ??? DP?? ?? ??? DP? ?
?? ??? ???.
? ? ????? DP?? ????.(base)
? ??? ??.
Tree DP ?? ????
? ??? ????(??? ??? ???)
???? ??
? ???? ????? NP? ??
¨C Ex) ?? ?? ??
??? ????(BOJ 2213)
? ?? ?? ??(maximum independent
set) ???, ???? ????? NP
? ???? ??? ?? DP? ?? ???
?? ??
??? ????(BOJ 2213)
? dp[u][c] : u? ??? ?? ???? u?
????(c = 1) ?? ???? ???(c =
0) ?? ?? ??? ??
? ?? ? 1 = ¡Æ ?? ? 0
? ??[?][0] = ¡Æ max ?? ? 0 , ?? ? 1
(v? c? ?? ??)
? ??[????][0]	= 	0, ??[????][1]	= 	1
?? ??? ??(AOJ GALLERY)
? ??? ??
? ?? ?? ??(minimum dominating set)
??? ??, ????? ???? ???
?? NP
? ???? ?? ??? ??
? ??? DP ???? ???? ?? ??
? ? Tree DP ???
? ??? ???(BOJ 2533)
¨C ?? ??? ?? ??? ??
? ?? ???(BOJ 2337)
? ????(BOJ 1805)
? ?? ??(BOJ 2454)
? ????(BOJ 2584)
? ??? ???(BOJ 1289)
? ?? ????(BOJ 1693)
? Karen and Supermarket(CF 815C)
? An overnight dance in discotheque(CF 814D)
Reference
? ???? ?? ?? ??
? ????? ???? ???
? http://codedoc.tistory.com/18
?????!
Ad

Recommended

Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)
Scott Wlaschin
?
Neo4J ??
Neo4J ??
?? ?
?
JJUG CCC 2018 Spring - I-7 (°³¤¬)¤Ï¤¸¤á¤Æ¤Î Netty
JJUG CCC 2018 Spring - I-7 (°³¤¬)¤Ï¤¸¤á¤Æ¤Î Netty
Shinya Mochida
?
FormÕJÔ^¤Çѧ¤ÖSpring SecurityÈëéT
FormÕJÔ^¤Çѧ¤ÖSpring SecurityÈëéT
Ryosuke Uchitate
?
Bluetooth mesh¤Î»ùµA
Bluetooth mesh¤Î»ùµA
PIXELAcorporation
?
nexus helm ??? private docker repo ??
nexus helm ??? private docker repo ??
choi sungwook
?
Neo4j in depth session1
Neo4j in depth session1
Samchu Li
?
Django ¤ÎÕJÔ^„IÀíŒg×°¥Ñ¥¿©`¥ó / Django Authentication Patterns
Django ¤ÎÕJÔ^„IÀíŒg×°¥Ñ¥¿©`¥ó / Django Authentication Patterns
Masashi Shibata
?
???? ???? ??? 3-B (LCA)
???? ???? ??? 3-B (LCA)
HYUNJEONG KIM
?
???? ???? ??? 3-C (C++11 and ETC)
???? ???? ??? 3-C (C++11 and ETC)
HYUNJEONG KIM
?
???? ???? ??? 2-C (Segment Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-B (Bitwise DP)
???? ???? ??? 1-B (Bitwise DP)
HYUNJEONG KIM
?
???? ???? ??? 1-C (???? ??? ??? ? ??)
???? ???? ??? 1-C (???? ??? ??? ? ??)
HYUNJEONG KIM
?
shake! 2017 ???? ??
shake! 2017 ???? ??
HYUNJEONG KIM
?
shake! 2017 ?? ?? ??
shake! 2017 ?? ?? ??
HYUNJEONG KIM
?
shake! 2016 ?? ?? ??
shake! 2016 ?? ?? ??
HYUNJEONG KIM
?

More Related Content

More from HYUNJEONG KIM (9)

???? ???? ??? 3-B (LCA)
???? ???? ??? 3-B (LCA)
HYUNJEONG KIM
?
???? ???? ??? 3-C (C++11 and ETC)
???? ???? ??? 3-C (C++11 and ETC)
HYUNJEONG KIM
?
???? ???? ??? 2-C (Segment Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-B (Bitwise DP)
???? ???? ??? 1-B (Bitwise DP)
HYUNJEONG KIM
?
???? ???? ??? 1-C (???? ??? ??? ? ??)
???? ???? ??? 1-C (???? ??? ??? ? ??)
HYUNJEONG KIM
?
shake! 2017 ???? ??
shake! 2017 ???? ??
HYUNJEONG KIM
?
shake! 2017 ?? ?? ??
shake! 2017 ?? ?? ??
HYUNJEONG KIM
?
shake! 2016 ?? ?? ??
shake! 2016 ?? ?? ??
HYUNJEONG KIM
?
???? ???? ??? 3-B (LCA)
???? ???? ??? 3-B (LCA)
HYUNJEONG KIM
?
???? ???? ??? 3-C (C++11 and ETC)
???? ???? ??? 3-C (C++11 and ETC)
HYUNJEONG KIM
?
???? ???? ??? 2-C (Segment Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
???? ???? ??? 1-A (Multi Dimension Segment/Fenwick Tree)
HYUNJEONG KIM
?
???? ???? ??? 1-B (Bitwise DP)
???? ???? ??? 1-B (Bitwise DP)
HYUNJEONG KIM
?
???? ???? ??? 1-C (???? ??? ??? ? ??)
???? ???? ??? 1-C (???? ??? ??? ? ??)
HYUNJEONG KIM
?

???? ???? ??? 1-D (Knapsack, Tree DP)

  • 5. Knapsack Problem? ?? ? Fractional Knapsack ¨C ??? ?? ? ?? ? 0/1 Knapsack ¨C ??? ?? ? ?? ¨C Unbounded Knapsack (??? ??? ??) ¨C Bounded Knapsack (??? ??? ??)
  • 6. Fractional Knapsack ? ??? ????, ?? ??? ??? ?? ? ? ??? ?? ??. ??? ?? ??? ? ?? ??? ?? ?? ??. ?? ?? ? ??? ? ?, ?? ?? ?????
  • 7. Fractional Knapsack ? Greedy ?? ¨C ?? / ??? ? ??? ??? ?????. ¨C ?? ???? ??? ?????. ? ????? O(?????)
  • 9. 0/1 Knapsack ? DP ?? ¨C ??[?][?] : 1 ~ i? ??? ???? ??? ?? j? ?? ? ???? ? ??? ??? ¨C ??[0][0] = 0, ??[0][?] = ?¡Þ ( 0 < ? <= ? ) ¨C ??[?][?] = 9 ??[? ¨C 1][?] ( ? < ? ? ) max ( ??[? ¨C 1][?], ??[? ¨C 1][? ¨C ?[?]] + ?[?]) ( ? >= ?[?] ) ????? : O(??) ????? : O(??)
  • 11. 0/1 Knapsack ? ???? ??(Sliding window) ?? ¨C ? ?? ?? swapping?? ?????? ? ?? ?? ¨C ?? => 2?? ??? ??
  • 12. 0/1 Knapsack ii - 1 ??[?][?]??[? ¨C 1][?] ??[? ¨C 1][? ¨C ??]
  • 13. 0/1 Knapsack ? ?? ? => ? % 2, ?? ? => 1 ¨C ? % 2
  • 14. 0/1 Knapsack ? 2? => ?? ??? ??! ii - 1 j ii - 1 j j ?? ??
  • 16. 0/1 Knapsack ? ??? ?? 1, 2, ¡­ , ???? ??? 0? ? ?? ??? ????? ??
  • 17. Unbounded Knapsack ? ??? ??? ?? ??? ??? ??? ?? ? ??. ??? ??? ?? ???? ? ?? ??? ???? ?, ?? ??? ? ??? ???. (?, ?? ??? ??? ? ??? ??? ?? ????) ? 1 <= ? <= 1000 ? 1 <= ??, ?? <= 1000 ? 1 <= ? <= 10000
  • 18. Unbounded Knapsack ? ??[?][?] : 1 ~ ?? ??? ???? ?? ?? ?? ??? ???? ? ?? ?? ? ??[0][0] = 0, ??[0][?] = ?¡Þ (0 < ? <= ?) ? ??[?][?] = max ( ??[? ¨C 1][? ¨C ? ? ??] + ? ? ??) (? >= 0) ????? O(??K ) ?? ?? ?? ????
  • 19. Unbounded Knapsack ? ??[?][?] = max ?? ? ¨C 1 ? ¨C ? ? ?? + ? ? ?? (? ¡Ý 0) = max( ?? ? ¨C 1 ? , max( ?? ? ¨C 1 ? ¨C ? ? ?? + ? ? ??)) (? ¡Ý 1) = max( ?? ? ¨C 1 ? , max( ?? ? ¨C ? ? ¨C ?? ¨C ? ? ?? + ? ? ??) + ??) (? ¡Ý 0) = max ( ??[? ¨C 1][?], ??[?][? ¨C ??] + ??)
  • 20. Unbounded Knapsack ? ??[? ¨C 1][? ¨C ??] => ??[?][? ¨C ??]
  • 23. Bounded Knapsack ? ??? ??, ??? ?? ??, ??, ??? ?? ? ??? ??. ??? ??? ?? ?? ?? ??? ??? ???? ?, ?? ? ?? ???? ???. ? 1 ¡Ü ? ¡Ü 1000 ? 1 ¡Ü ??, ?? ¡Ü 1000 ? 1 ¡Ü ?? ¡Ü 1000 ? 1 ¡Ü ? ¡Ü 10000
  • 24. Bounded Knapsack ? (??, ??, ??) => ???? (??, ??, 1)? ?? => 0/1 Knapsack ? ????? O(W ¡Æ ??) => TLE
  • 25. Bounded Knapsack ? ?? = 2 + 2] + 2K + ¡­ + 2^ + ? (0 ¡Ü ? < 2^`] ) ? ??, ??, ?? ? ????? O(nWlogm) ? ?? ? 2 , ?? ? 2 , 1 , ¡­ , ?? ? ?, ?? ? ?, 1 ? 0/1 Knapsack
  • 27. Bounded Knapsack ? ?? dp?? ??? ? ??[?][?] = max ( ??[? ¨C 1][? ¨C ? ? ??] + ? ? ??) (0 <= ? <= ??) ? ?? ?? O(???) ? ????? k? ????.
  • 28. Bounded Knapsack ?? ? ??? ? 2?? ??? ??? ? ?? ?? ????? dp?? ??
  • 29. Bounded Knapsack ? ? = ?? ? ? + ? (0 ¡Ü r < wi), ?? ? ?? ? ??[?][?] ? ?? ?? ? => ? ? ?? ?? ? = max ?? ? ? 1 ? ? ? ? ?? + ? ? ?? (0 ¡Ü ? ¡Ü ??) = max ?? ? ? 1 ? ? ? ? ?? + ? + ? ? ?? = max ?? ? ? 1 ? ? ? ? ?? + ? ? ? ? ? ? ?? + ? ? ??
  • 30. Bounded Knapsack ? ? ? ? = ? ? ?(?) = ??[? ? 1][? ? ?? + ?] ? ? ? ?? ? ?? [? ? ??, ?]?? f(x)? ??? ?? ??? ?? ? RMQ? ?? O(logm)??? ? ?(deque)? ???? O(1)? ?? ?? ? ? = max ?? ? ? 1 ? ? ?? + ? ? ? ? ?? + ? ? ?? (q ? mi ¡Ü x ¡Ü q) ? ????? O(nW)
  • 32. Knapsack ??? ? ??/?? ??? ??? ?/?? ?? ? ??? ?? ?? ?? ? ?, ?, ? ? ??? ??? ?? dp?? ?? ? ?? ¨C ?? ?? ?? ?, ?? ?? ? ?? dp? ?? => meet in the middle ? ? ??? ??? ?? ?? / ??? ?? ???
  • 33. Knapsack ?? ??? ? ?(BOJ 7579) ? ??1(BOJ 2293) ? ??2(BOJ 2294) ? ??(BOJ 1226) ? Buying Apples!(SPOJ ABA12C) ? Large Knapsack(SPOJ LKS)
  • 35. Tree DP ?? ? ?? ???? ?? ?? ???? ?? ????? ?? ??? ? ? ?? ?? = ?? ??
  • 36. Tree DP v w1 w2 wn. . . dp[v] dp[w1] dp[w2] dp[wn]
  • 37. Tree DP v1 . . . dp[v1] vm dp[vm] Root . . . . . . . . . dp[root]
  • 38. Tree DP v1 . . . dp[v1][a1] vm dp[vm][a1] Root . . . . . . . . . dp[root][a1]
  • 39. Tree DP v1 . . . dp[v1][a1]..[an] vm dp[vm][a1]..[an] Root . . . . . . . . dp[root][a1]..[an]
  • 40. Tree DP? ?? ?? ? ??? DP ?? ????. ? ?? ??? DP?? ?? ??? DP? ? ?? ??? ???. ? ? ????? DP?? ????.(base) ? ??? ??.
  • 41. Tree DP ?? ???? ? ??? ????(??? ??? ???) ???? ?? ? ???? ????? NP? ?? ¨C Ex) ?? ?? ??
  • 42. ??? ????(BOJ 2213) ? ?? ?? ??(maximum independent set) ???, ???? ????? NP ? ???? ??? ?? DP? ?? ??? ?? ??
  • 43. ??? ????(BOJ 2213) ? dp[u][c] : u? ??? ?? ???? u? ????(c = 1) ?? ???? ???(c = 0) ?? ?? ??? ?? ? ?? ? 1 = ¡Æ ?? ? 0 ? ??[?][0] = ¡Æ max ?? ? 0 , ?? ? 1 (v? c? ?? ??) ? ??[????][0] = 0, ??[????][1] = 1
  • 44. ?? ??? ??(AOJ GALLERY) ? ??? ?? ? ?? ?? ??(minimum dominating set) ??? ??, ????? ???? ??? ?? NP ? ???? ?? ??? ?? ? ??? DP ???? ???? ?? ??
  • 45. ? ? Tree DP ??? ? ??? ???(BOJ 2533) ¨C ?? ??? ?? ??? ?? ? ?? ???(BOJ 2337) ? ????(BOJ 1805) ? ?? ??(BOJ 2454) ? ????(BOJ 2584) ? ??? ???(BOJ 1289) ? ?? ????(BOJ 1693) ? Karen and Supermarket(CF 815C) ? An overnight dance in discotheque(CF 814D)
  • 46. Reference ? ???? ?? ?? ?? ? ????? ???? ??? ? http://codedoc.tistory.com/18