Greedy TIM AU YEUNG HKOI 2012 Greedy Try some cases Make a guess local optimum -> global optimum Not really a specific algorithm Practice more By feelings Example 1: Coins 7 kinds of coins: $0.1, $0.2, $0.5, $1, $2, $5, $10 Find minimum number of coins needed to pay $n Try n = 3.6 $2, $1, $0.5, $0.1 Try n = 18 $10, $5, $2, $1 Every time use the coin of highest value Example 2: Subarray Sum Given a one-dimensional array of numbers (containing at least one positive number) Find the nonempty contiguous subarray which has the largest sum Calculate maximum subarray ending at each position simple example of DP (will be taught later) If all numbers are non-positive? Example 3: Bridge and Torch Four people come to a river in the night. There is a narrow bridge, but it can only hold two people. Person A can cross the bridge in 1 minute, B in 2 minutes, C in 5 minutes, and D in 8 minutes. When two people cross the bridge together, they must move at the slower person's pace. What is the minimum time required for all four people to cross the river? Example 3: Bridge and Torch N people 1) AB Go A Back, YZ Go B Back 2) AZ Go A Back, AY Go A Back N-2 people Example 4: Yogurt factory POJ 2393 C_i: cost to produce one unit of yogurt in week i S: fee to store one unit of unused yogurt per week Y_i: units of yogurt demanded in week i (Yogurt produced in week i and already in storage, can be used to meet yogurt demand for that week) Week i: sell yogurt produced in week j (j<=i) minC = min(C_i, minC + S) Example 5: Persistent Numbers POJ2325 Given a number n, find the smallest number that can reach n by repeatedly multiplying the digits e.g. 679 -> 378 -> 168 -> 48 -> … 48 can be reached from 679 There may be No Solution! Factorize n by 9, 8, 7, 6, 5, 4, 3, 2 in order Distribute them from low-value digit to high-value digit Greedy Practice List POJ 2709 POJ 1042 POJ 1065 POJ 2586 POJ 1328 POJ 1018 HKOJ 1019 HKOJ 1137 HKOJ 2014 If (Greedy_fails) Fail for boundary cases Special solution deal with them Fail for many cases Don’t be greedy Think of other algorithm Greedy Conclusion Guess Try some cases Hard to prove or disprove Easy to code Efficient Practice more!