Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dynamic Programming (II)(III) 28/8/2004 11/9/2004 Presented by Eddy Chan.

Similar presentations


Presentation on theme: "Dynamic Programming (II)(III) 28/8/2004 11/9/2004 Presented by Eddy Chan."— Presentation transcript:

1 Dynamic Programming (II)(III) 28/8/2004 11/9/2004 Presented by Eddy Chan

2 Problems to be covered (mostly taken from acm.uva.es) 10003 Cutting Sticks 10544 Numbering the Paths 10564 Paths through the Hourglass Circular Massacre HKOI 2001 Senior Q4 Effective Enterprise 10549 Russian Dolls 10453 Make Palindrome IOI2002 day 2 batch scheduling

3 10003 Cutting Sticks Example 0 4 5 7 8 10 i\F(i,j)\j0457810 0005101522 4003712 50038 7003 800 100

4 10003 Cutting Sticks State: portion start, portion end Formula: F(i,j)=0 if |i-j|<=1 F(i,j)=min( F(i,k)+F(k,j) ) + j-i i+1<=k<=j-1

5 10544 Numbering the Paths In sample input: AB AC BC CD CE ED If the query is : ACD  ABCD ABCED ACD ACED So the answer is 3 A BC DE

6 10544 Numbering the Paths After Topological sort:  ABCED Let No. of paths from i to j be P(i,j) Let F(S) be the number of the path S IABCED P(i,D)42211 F(ACD)=F(ABD)+1=P(B,D)+1=2+1

7 10544 Numbering the Paths Let A=x1, B=x2, …, Z=x26 F(xi1 xi2 … xiN) =P(x1,xiN)+…+P(x(i1-1),xiN) + P(xj1,xiN) for all j1 s.t. (xi1,xj1) is a road and j1<xi2 + P(xj2,xiN) for all j2 s.t. (xi2,xj2) is a road and j2<xi3 … +1

8 10564 Paths through the Hourglass A way to store the values: Table[r,c]--L->Table[r+1,c] Table[r,c]--R->Table[r+1,c+1] 6 41 6 7 2 3 6 8 1 8 0 7 1 2 6 5 7 3 1 0 7 6 8 8 8 6 5 3 9 5 9 5 6 4 4 1 3 2 6 9 4 3 8

9 10564 Paths through the Hourglass F(0,j,Table[0,j])=1 F(0,j,k)=0 if k<>Table[0,j] F(i,j,s)=F(i-1,j-1,s-Table[i,j])+F(i-1,j,s-Table[i,j]) We can use another storage P(i,j,s) to store the previous value, so that we can trace back the path

10 HKOI 2001 Senior Q4 Effective Enterprise (The question can be obtained in the official website of HKOI) A, B, C are the number of ppl recruited in Department A, B and C respectively Ca(i), Cb(i), Cc(i) are the contributions of person i to department A, B and C respectively F(A,B,C,i)=max( F(A-1,B,C,i-1)+Ca(i), F(A,B-1,C,i-1)+Cb(i), F(A,B,C-1,i-1)+Cc(i), F(A,B,C,i-1) )

11 Circular Massacre (similar to judge 1030) There are n people sit around a table, numbered 1 to n clockwisely. Every k person will be killed, until there is only 1 person left. Find the survivor.

12 Circular Massacre Example: n=10, k=2 1 2 3 4 5 6 7 8 9 10 The sequence of death: 2 4 6 8 10 3 7 1 9 and the survivor is 5 F(n)=(F(n-1)+2-1) mod (n) +1 If ppl are numbered from 0 to n-1 F(n)=(F(n-1)+2) mod (n)

13 Circular Massacre k=2 NF(n) 11 21 33 41 53 65 77 81 93 105

14 Circular Massacre Explanation: When we have 10 people, after the first one is killed, there are 9 people left. If we know the survivor of the case n=9, by mapping the values to the case n=10, we know the survivor for n=10.

15 Circular Massacre If now we kill one person every k people, which is the survivor? F(n)=(F(n-1)+k) mod (n) Example: k=3

16 Circular Massacre We want to have a better solution to the problem. Look at the table for k=3: F(n)=(F(n-1)+3-1) mod (n) +1 If we know the highlighted values (F(N)=1 to k-1), we know the survivor. NF(N) 111422720 221552823 321682926 4117113029 541814311 611917324 7420 87212 91225 104238 1172411 12102514 13 2617

17 Circular Massacre Rule for k=3 if N-F(N)=2m, next value is N+m+1, F(N+m+1)=2 if N-F(N)=2m+1, next value is N+m+1, F(N+m+1)=1 general case: if N-F(N)=(k-1)m+i, next value is N+m+1, F(N+m+1)=k-1-i

18 10549 Russian Dolls 1. Sorting (so that the later dolls cannot contain the previous dolls) 2. DP F(the current doll, the number of dolls for first person, the number of dolls for second person, the last doll for first person, the last doll for second person)

19 10549 Russian Dolls Note that: 1. the number of dolls for second person = the current doll - number of dolls for first person and 2. there should be at least one person has the last doll

20 10453 Make Palindrome Same as doing longest common subsequence F[i][j] = F[i-1][j-1] + 1 if A[i]=B[j] F[i][j] = max{F[i-1][j], F[i][j-1]}

21 IOI2002 day 2 batch scheduling Question & handout: http://olympiads.win.tue.nl/ioi/ioi2002/contest/day2/batch/batch.pdf http://olympiads.win.tue.nl/ioi/ioi2002/contest/day2/batch/batch-handout.pdf (refer to the handout for the question): Let Ci be the minimum total cost of all partitionings of jobs Ji, Ji +1, …, Jn into batches. Let Ci(k) be the minimum total cost when the first batch is selected as {Ji, Ji +1, …, Jk-1} That is, Ci(k) = Ck + (S + Ti + Ti+1 + …+ Tk-1) * (Fi + Fi+1 + … + Fn). Then we have that Ci = min { Ci(k) | k = i+1, …, n+1} for 1<=i<=n, and Cn+1 = 0.

22 IOI2002 day 2 batch scheduling Notice that if you do it from job 1 to job n, you have to add one more parameter in your DP table, which is the number of batches. This will increase the runtime to O(n 3 ) There is an O(n) solution, you may read it yourself if you are interested.


Download ppt "Dynamic Programming (II)(III) 28/8/2004 11/9/2004 Presented by Eddy Chan."

Similar presentations


Ads by Google