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 !