**Editorialist :** Sudheera Y S

**Problem Link :** ZIO 2008 Problem 3

**Prerequisites :** combinatorics , stars and bars , dp

**Problem statement :**

There are K boards to be hung on ‘N’ poles . Each board can be of length 1 or 2 and no two boards can share a common pole. Find the number of ways of doing so.

**METHOD 1 : COMBINATORICS** →

**Subtask A :**

N = 8 , K = 2

Let’s assume that the lengths of the two boards are L1 and L2

The first board is after X1 poles

The number of poles between both the boards is Y

There are X2 poles after the second pole

How many places are there to fill ?

A board takes the gap between two poles and not the poles , therefore we need to count the number of gaps between two consecutive poles and not the number of poles

The number of gaps between consecutive poles where the N is the number of poles is N-1

Therefore we have N-1 places to fill the boards and not N

Here is how it would look :

X1 L1 Y L2 X2 = 8-1 = 7

X1 + L1 + Y + L2 + X2 = 7

where

X1 , X2 >= 0

Y >= 1 : Because any pole cant have 2 boards

So now there is a problem as Y should be greater than 1 , so to make it 0 , we subtract 1 from both the sides and let our new variable Y’ be Y-1 and our new equation would be :

X1 + L1 + Y’ + L2 + X2 = 7-1 = 6

Now here , X1 , Y’ , X2 >= 0 , therefore we can apply the formula

We know that L1 , L2 should be 1 or 2

So let us take those cases and find out answers for each of them and we will add the answers for all the cases cases and we would get our answer

**Case 1 :** L1 = 1 , L2 = 1 :

X1 + L1 + Y’ + L2 + X2 = 7-1 = 6

X1 + 1 + Y’ + 1 + X2 = 6

X1 + Y’ + X2 = 4

Formula for this is (3+4-1)C(3-1) = 6C2 = 15

**Case 2 :** L1 = 2 , L2 = 1 :

X1 + L1 + Y’ + L2 + X2 = 7-1 = 6

X1 + 2 + Y’ + 1 + X2 = 6

X1 + Y’ + X2 = 3

Formula for this is (3+3-1)C(3-1) = 5C2 = 10

**Case 3 :** L1 = 1, L2 = 2 :

X1 + L1 + Y’ + L2 + X2 = 7-1 = 6

X1 + 1 + Y’ + 2 + X2 = 6

X1 + Y’ + X2 = 3

Formula for this is (3+3-1)C(3-1) = 5C2 = 10

**Case 4 :** L1 = 2 , L2 = 2 :

X1 + L1 + Y’ + L2 + X2 = 7-1 = 6

X1 + 2 + Y’ + 2 + X2 = 6

X1 + Y’ + X2 = 2

Formula for this is (3+2-1)C(3-1) = 4C2 = 6

15 + 20 + 6 = 41

**OBSERVATION :** Here we observe that the answer for both case 2 and case 3 is the same because only the values of L1 and L2 are changing and it doesn’t matter. Instead of doing case 3 we could have just done 2* 5C2 = 20 = Case 2 + Case 3

**Answer : 41**

**Subtask B :**

N = 9 , K = 3

Number of places to fill - 8

Number of places before board 1 - X1

Number of places between board 1 and board 2 - Y1

Number of places between board 2 and board 3 - Y2

Number of places after board 3 - X2

Lengths of boards - L1 , L2 , L3

X1 L1 Y1 L2 Y2 L3 X2

**Equation :** X1 + L1 + Y1 + L2 + Y2 + L3 + X2 = 8

Y1 , Y2 >= 1 , subtracting 1 both sides two times ( one time for Y1 and another time for Y2 )

**New equation :** X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 8-1-1 = 6

**Case 1 :** L1 = L2 = L3 = 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 6

X1 + 1 + Y’1 + 1 + Y’2 + 1 + X2 = 6

X1 + Y’1 + Y’2 + X2 = 3

Number of ways to do this : ( 3+4-1)C(4-1) = 6C3 = 20

**Case 2 :** L1 or L2 or L3 = 2 , other two 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 6

X1 + 2 + Y’1 + 1 + Y’2 + 1 + X2 = 6

X1 + Y’1 + Y’2 + X2 = 2

Number of ways we can choose L1 or L2 or L3 = 2 → 3C1 = 3

Number of ways to do the above equation : (2+4-1)C(4-1) = 5C3 = 10

Total number of ways → 3*10 = 30

**Case 3 :** Any two of L1 , L2 , L3 = 2 , the other one is 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 6

X1 + 2 + Y’1 + 2 + Y’2 + 1 + X2 = 6

X1 + Y’1 + Y’2 + X2 = 1

Number of ways we can choose two boards to have length 2 → 3C2 = 3

Number of ways to do the above equation : (1+4-1)C(4-1) = 4C3 = 4

Total number of ways → 3*4 = 12

**Case 4 :** All of them L1 , L2 , L3 = 2 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 6

X1 + 2 + Y’1 + 2 + Y’2 + 2 + X2 = 6

X1 + Y’1 + Y’2 + X2 = 0

Number of ways to do the above equation : (0+4-1)C(4-1) = 3C3 = 1

20 + 30 + 12 + 1 = 63

**Answer : 63**

Now let us do Subtask D as K = 3 →

**Subtask D :**

N = 11 , K = 3

Number of places to fill - 10

Number of places before board 1 - X1

Number of places between board 1 and board 2 - Y1

Number of places between board 2 and board 3 - Y2

Number of places after board 3 - X2

Lengths of boards - L1 , L2 , L3

X1 L1 Y1 L2 Y2 L3 X2

**Equation :** X1 + L1 + Y1 + L2 + Y2 + L3 + X2 = 10

Y1 , Y2 >= 1 , subtracting 1 both sides two times ( one time for Y1 and another time for Y2 )

**New equation :** X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 10-1-1 = 8

**Case 1 :** L1 = L2 = L3 = 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 8

X1 + 1 + Y’1 + 1 + Y’2 + 1 + X2 = 8

X1 + Y’1 + Y’2 + X2 = 5

Number of ways to do this : ( 5+4-1)C(4-1) = 8C3 = 56

**Case 2 :** L1 or L2 or L3 = 2 , other two 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 8

X1 + 2 + Y’1 + 1 + Y’2 + 1 + X2 = 8

X1 + Y’1 + Y’2 + X2 = 4

Number of ways we can choose L1 or L2 or L3 = 2 → 3C1 = 3

Number of ways to do the above equation : (4+4-1)C(4-1) = 7C3 = 35

Total number of ways → 3*35 = 105

**Case 3 :** Any two of L1 , L2 , L3 = 2 , the other one is 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 8

X1 + 2 + Y’1 + 2 + Y’2 + 1 + X2 = 8

X1 + Y’1 + Y’2 + X2 = 3

Number of ways we can choose two boards to have length 2 → 3C2 = 3

Number of ways to do the above equation : (3+4-1)C(4-1) = 6C3 = 20

Total number of ways → 3*20 = 60

**Case 4 :** All of them L1 , L2 , L3 = 2 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + X2 = 8

X1 + 2 + Y’1 + 2 + Y’2 + 2 + X2 = 8

X1 + Y’1 + Y’2 + X2 = 2

Number of ways to do the above equation : (2+4-1)C(4-1) = 5C3 = 10

56 + 105 + 60 + 10 = 231

**Answer : 231**

**Subtask C :**

N = 10 , K = 4

Number of places to fill - 9

Number of places before board 1 - X1

Number of places between board 1 and board 2 - Y1

Number of places between board 2 and board 3 - Y2

Number of places between board 3 and board 4 - Y3

Number of places after board 4 - X2

Lengths of boards - L1 , L2 , L3, L4

X1 L1 Y1 L2 Y2 L3 Y3 L4 X2

**Equation :** X1 + L1 + Y1 + L2 + Y2 + L3 + Y3 + L4 + X2 = 9

Y1 , Y2 , Y3 >= 1 , subtracting 1 both sides three times ( one time for Y1 and another time for Y2 and another time for Y3 )

**New equation :** X1 + L1 + Y’1 + L2 + Y’2 + L3 + Y’3 + L4 + X2 = 9-1-1-1 = 6

**Case 1 :** L1 = L2 = L3 = L4 = 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + Y’3 + L4 + X2 = 6

X1 + 1 + Y’1 + 1 + Y’2 + 1 + Y’3 + 1 + X2 = 6

X1 + Y’1 + Y’2 + Y’3 + X2 = 2

Number of ways to do this : ( 2+5-1)C(5-1) = 6C4 = 15

**Case 2 :** L1 or L2 or L3 or L4 = 2 , other three 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + Y’3 + L4 + X2 = 6

X1 + 2 + Y’1 + 1 + Y’2 + 1 + Y’3 + 1 + X2 = 6

X1 + Y’1 + Y’2 + Y’3 +X2 = 1

Number of ways we can choose L1 or L2 or L3 or L4 = 2 → 4C1 = 4

Number of ways to do the above equation : (1+5-1)C(5-1) = 5C4 = 5

Total number of ways → 4*5 = 20

**Case 3 :** Any two of L1 , L2 , L3, L4 = 2 , the other two is 1 :

X1 + L1 + Y’1 + L2 + Y’2 + L3 + Y’3 + L4 + X2 = 6

X1 + 2 + Y’1 + 2 + Y’2 + 1 + Y’3 + 1 + X2 = 6

X1 + Y’1 + Y’2 + Y’3 + X2 = 0

Number of ways we can choose two boards to have length 2 → 4C2 = 6

Number of ways to do the above equation : (0+5-1)C(5-1) = 4C4 = 1

Total number of ways → 6*1 = 6

Now , if we continue like this in the next step , our RHS would become negative which we can do in 0 ways , so we can skip this and directly find our answer

15 + 20 + 6 = 41

**Answer : 41**

**METHOD 2 :** DYNAMIC PROGRAMMING ( DP ) →

Let us define our dp table as follows :

Dp[ i ][ j ] = number of ways to arrange i signs between j poles

And our answer would be stored in dp[ K ][ N ]

**Base case :**

As we see , to hang i boards , we need at least 2i places

Therefore dp[ i ][ 2i ] = 1 and dp[ i ][ x ] = 0 where x < 2i

Dp[ 1 ][ 3 ] = ( j - 1) + ( j - 2) = 2 + 1 = 3

Dp[ 1 ][ j ] = (j-1) + ( j-2 ) = 2*j - 3 →

Because there is only one board and there are j places so we can put it in j-1 ways and if the length is 2 then we can put it in j-2 places .

Now is the recursion :

**CASE 1 :** Either we consider the jth pole :

**Case 1 :** The current length of the board we are considering right now is 1 :

We can do it just by adding the current board to the end , So we have i-1 boards ( -1 because of excluding current board ) and in j-2 places ( -2 because the length of the board is 1 )

Therefore the answer to this is dp[ i-1 ][ j - 2 ]

**Case 2 :** The current length of the board we are considering right now is 2 :

We can do it just by adding the current board to the end , So we have i-1 boards ( -1 because of excluding current board ) and in j-3 places ( -3 because the length of the board is 2 )

Therefore the answer to this is dp[ i-1 ][ j - 3 ]

**CASE 2 :** If we don’t consider the jth pole :

Then the answer is simply dp[ i ][ j-1]

Therefore , dp[ i ][ j ] = dp[ i ][ j-1 ] + dp[ i-1 ][ j-2 ] + dp[ i-1 ][ j-3 ]

Now , let us start filling the dp table :

Here we also note that the same dp table will be the same for all the testcases , so we can only maintain only one dp table . The maximum value of k is 4 and that of N is 11 . So we will do dp table of size 11*4

Rows are K and the columns are N

Here is how the dp table would look after doing the base case :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|

1 | 0 | 1 | |||||||||

2 | 0 | 0 | 0 | 1 | |||||||

3 | 0 | 0 | 0 | 0 | 0 | 1 | |||||

4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |

Dp[ 1 ][ 3 ] = 2*3 - 3 = 3

Dp[ 1 ][ 4 ] = 2*4 - 3 = 5

Dp[ 1 ][ 5 ] = 2*5 - 3 = 7

Dp[ 1 ][ 6 ] = 2*6 - 3 = 9

Dp[ 1 ][ 7 ] = 2*7 - 3 = 11

Dp[ 1 ][ 8 ] = 2*8 - 3 = 13

Dp[ 1 ][ 9 ] = 2*9 - 3 = 15

Dp[ 1 ][ 10 ] = 2*10 - 3 = 17

Dp[ 1 ][ 11 ] = 2*11 - 3 = 19

And our dp table will be :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|

1 | 0 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |

2 | 0 | 0 | 0 | 1 | |||||||

3 | 0 | 0 | 0 | 0 | 0 | 1 | |||||

4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |

Now k = 2

Dp[ 2 ][ 5 ] = dp[ 2 ][ 4 ] + dp[ 1 ][ 2 ] + dp[ 1 ][ 3 ] = 1 + 1 + 3 = 5

Dp[ 2 ][ 6 ] = dp[ 2 ][ 5 ] + dp[ 1 ][ 3 ] + dp[ 1 ][ 4 ] = 5 + 3 + 5 = 13

Dp[ 2 ][ 7 ] = dp[ 2 ][ 6 ] + dp[ 1 ][ 4 ] + dp[ 1 ][ 5 ] = 13 + 5 + 7 = 25

Dp[ 2 ][ 8 ] = dp[ 2 ][ 7 ] + dp[ 1 ][ 5 ] + dp[ 1 ][ 6 ] = 25 + 7 + 9 = 41 ( SUBTASK A )

Dp[ 2 ][ 9 ] = dp[ 2 ][ 8 ] + dp[ 1 ][ 6 ] + dp[ 1 ][ 7 ] = 41 + 9 + 11 = 61

Dp[ 2 ][ 10 ] = dp[ 2 ][ 9 ] + dp[ 1 ][ 7 ] + dp[ 1 ][ 8 ] = 61 + 11 + 13 = 85

Dp[ 2 ][ 11 ] = dp[ 2 ][ 10 ] + dp[ 1 ][ 8 ] + dp[ 1 ][ 9 ] = 85 + 13 + 15 = 113

Now the dp table would be like this :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|

1 | 0 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |

2 | 0 | 0 | 0 | 1 | 5 | 13 | 25 | 41 | 61 | 85 | 113 |

3 | 0 | 0 | 0 | 0 | 0 | 1 | |||||

4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |

Now k = 3 :

Dp[ 3 ][ 7 ] = dp[ 3 ][ 6 ] + dp[ 2 ][ 4 ] + dp[ 2 ][ 5 ] = 1 + 1 + 5 = 7

Dp[ 3 ][ 8 ] = dp[ 3 ][ 7 ] + dp[ 2 ][ 5 ] + dp[ 2 ][ 6 ] = 7 + 5 + 13 = 25

Dp[ 3 ][ 9 ] = dp[ 3 ][ 8 ] + dp[ 2 ][ 6 ] + dp[ 2 ][ 7 ] = 25 + 13 + 25 = 63 ( SUBTASK B )

Dp[ 3 ][ 10 ] = dp[ 3 ][ 9 ] + dp[ 2 ][ 7 ] + dp[ 2 ][ 9 ] = 63 + 25 + 41 = 129

Dp[ 3 ][ 11 ] = dp[ 3 ][ 10 ] + dp[ 2 ][ 8 ] + dp[ 2 ][ 10 ] = 129 + 41 + 65 = 231 ( SUBTASK D )

Now our dp table would be like this :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|

1 | 0 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |

2 | 0 | 0 | 0 | 1 | 5 | 13 | 25 | 41 | 61 | 85 | 113 |

3 | 0 | 0 | 0 | 0 | 0 | 1 | 7 | 25 | 63 | 129 | 231 |

4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |

Now k = 4 :

Dp[ 4 ][ 9 ] = dp[ 4 ][ 8 ] + dp[ 3 ][ 6 ] + dp[ 3 ][ 7 ] = 1 + 1 + 7 = 9

Dp[ 4 ][ 10 ] = dp[ 4 ][ 9 ] + dp[ 3 ][ 7 ] + dp[ 3 ][ 8 ] = 9 + 7 + 25 = 41 ( SUBTASK C )

Dp[ 4 ][ 11 ] = dp[ 4 ][ 10 ] + dp[ 3 ][ 8 ] + dp[ 3 ][ 9 ] = 41 + 25 + 63 = 129

Now our dp table would look like this :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|

1 | 0 | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |

2 | 0 | 0 | 0 | 1 | 5 | 13 | 25 | 41 | 61 | 85 | 113 |

3 | 0 | 0 | 0 | 0 | 0 | 1 | 7 | 25 | 63 | 129 | 231 |

4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 9 | 41 | 129 |

**Answers :**

Subtask A : 41

Subtask B : 63

Subtask C : 41

Subtask D : 231

Hope you understood both the methods

Special thanks to my mentor of ICPC for schools , @sarthakmanna sir and @avijit_agarwal sir for teaching me stars and bars method !