Problem Statement
- each string of the set contains only characters '0','1', ..., ('0'+K-1)
- no string of the set is a prefix of any other string of the set.
You are given the size of the code N and the costs of using the characters characterCosts. Return the minimal possible cost of a prefix-free code of size N which uses these character costs.
Definition
- Class:
- PrefixFreeCode
- Method:
- minCost
- Parameters:
- int, int[]
- Returns:
- int
- Method signature:
- int minCost(int N, int[] characterCosts)
- (be sure your method is public)
Constraints
- N will be between 2 and 500, inclusive.
- characterCosts will contain between 2 and 50 elements, inclusive.
- Each element of characterCosts will be between 1 and 100, inclusive.
Examples
2
{1,4}
Returns: 5
The cheapest code of size 2 which can be constructed from characters '0' (cost 1) and '1' (cost 4) is simply {"0", "1"}.
3
{1,4}
Returns: 11
The cheapest code of size 3 is {"00","01","1"}.
6
{1,4}
Returns: 35
3
{1,3,5}
Returns: 9
Here exist two cheapest codes - {"0","1","2"} and {"00","01","1"}.
500
{100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100}
Returns: 96000
500
{ 1, 3, 5, 7, 9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99}
Returns: 6780
max character number (#6 too)
500
{ 2, 4, 6, 8,10,12,14,16,18,20, 22,24,26,28,30,32,34,36,38,40, 42,44,46,48,50,52,54,56,58,60, 62,64,66,68,70,72,74,76,78,80, 82,84,86,88,90,92,94,96,98,100}
Returns: 9464
500
{96,78,24,94,19,43,53,79,56,55,25,63,76,58,69,96,51,18,34,3,39,90,71}
Returns: 26160
the cases which break greedy (#7 - #11, #13 etc)
499
{9,54,40,27,38,53,86,84,65,10,5,85,100,90,63,2,26,70,78,75,75,43,6,87,66,83,34,9,7,100,61,5,56,88,74,79,82,50,14,73,51,52,89,71,59,13,83,77,15}
Returns: 8368
456
{56,1,1,93,22,65,4,89,67,22,15,64,10,21,65,74,7,46,59,11,10,41,1,93,19,52,94,27,31,65,76,56,90,42,12,35,54,7,36,93,84,64,53,95,58,19,42,65,25,91}
Returns: 2586
194
{42,17,82,55,22,72,34,86,50,100,94,36,29,8,3,10,46,64,23,22,44,24,73,29,99}
Returns: 5553
383
{91,91,100,92,64,83,74,31,57,61,74,21,90,16,89,81,98,41,31,55,35,62,53,55,8,48,54,60,15,51,14,51,84,83,22,47,19,44,85,51,76,91,42,66}
Returns: 17945
270
{11,50,99,75,69,8,98,94,37,89,98,78,2,21,1,29}
Returns: 3105
135
{27,24,32,79,76,69,100,90,72,19,21,41,24,21,22,56,83}
Returns: 7727
98
{93,19,38,88,96,65,35,45,57,7,44,79,17,57,53,98,27}
Returns: 4868
459
{82,5,89,71,50,8,59,89,27,91,82,88,83,62,25,18,91,50,98,63,50}
Returns: 21755
221
{46,15,10,35,28,20,28,27,52,3,56,62,50,97,16,81,27,73,93,79,12,55,97,45,94,9,31,39}
Returns: 6063
64
{33,3,14,64,94,66,52,59,70,13,57,16,46,9,12,58,76,68,15,84,100,44,14,71,63,12,54,14,64,84}
Returns: 1288
78
{56,80,56,27,10,17,13,66,100,49,26,16,20,4,93,90}
Returns: 2183
159
{97,97,96,99,56,31,23,91,91,27,13,15,2,11,23,85,84,44,48,3,79,93,90,71,31,47,25,4,45}
Returns: 2122
135
{92,81,95,38,89,16,99,59,89,23,11,81,2,79,5,84,18,74,1,68,27,2,49,38,54,45,26}
Returns: 962
302
{36,5,73,66,75,70,58,41,52,100,11,49,39,74,13,67,3,70,15,19,67,68,2,78,50,41,25}
Returns: 4851
165
{52,43,90,50,76,71,44,55,26,91,9,6,21,44,46,60,37,28,16,13,45,49}
Returns: 5985
152
{84,93,100,39,1,34,75,4,65,59,61,19,61,55,85,62,48,50,23,69,43,82,61,68,31,87}
Returns: 2412
273
{30,77}
Returns: 110791
180
{74,89,21,34,26,27,8,21,22,83,36,60,92,46,50,30,95,54,77,13,41,36,14,85,64,53,72,40,22,48,16,56,68,47,57,81,3,64,91,87,85,34,76,99,30,87,7}
Returns: 4296
490
{96,77,93,19,42,57,90,93,71,28,84,8,66,60,16,81,63,75,77,20,94,48,1,1,77,25,53,26,11,92,9,66,43}
Returns: 4383
128
{41,62,82,66,80,53}
Returns: 21906
148
{76,26,8,70,34,8,64,35,53}
Returns: 7499
225
{26,55,43,47,15}
Returns: 25045
187
{41,23,1,36,81,30,36,14,12,63,8,54,97,17,2,49,83,19,61,59,100,81,79,80,14,28,49,9,57,63,57,99,30}
Returns: 2008
254
{23,1,42,59,38,80,92,26,70,79,94,99,78,79,30,41,35,43,61,33}
Returns: 11555
420
{70,58,58,29,23,40,50,70,11,7,59,69,67,90,35,86,1,72,7,94,86,66,14,90,2,98,29,9,97,12,20,49,12,6,15,85}
Returns: 4837
370
{92,42,47,58,8,23,74,77,60,30,66,89,38,73,25,68,48,17,69,1,40,97,99,6,80,42,82,62,8,34}
Returns: 6947
328
{45,98,90,14,39,24,9,25,94,88,63,33,50,5,27,63,97,64,26,97,9,29}
Returns: 11540
270
{62,6,8,69,76,39,4,7,88,26,35,28,64,51}
Returns: 6653
138
{9,67,4,73,1}
Returns: 2038
199
{5,33,67,5,10}
Returns: 6118
18
{42,89,48,51,14,52,99,18}
Returns: 952
272
{22,13,10,31,67,42,6,2,32,13,29}
Returns: 6482
250
{36,25,78,19,37,66,77,20,4,42,1,78,91,24,77,95,73,15}
Returns: 4326
205
{25,79,63,6,47,13,83,16,8,79}
Returns: 7753
463
{75,64,88,44,51,5,44,77,87,28,13,49,76,63,94,58,25,73,14,21,20,34,80,48,39,100,96,36,37,60,16,79,43,83,77,51,94,14,74,61,94,87,21,17,26,85,59,20}
Returns: 17650
294
{9,43,35,35}
Returns: 31706
280
{14,29,90,61,87,9,13,48,59,8,9,9,80,53,68,13,11,87,90,61,99,11,74,58,48,42,15,67,38,74,4,39,16,42,35,47}
Returns: 6396
385
{49,57,28,17,78,77,65,46,8,20,11,77,39}
Returns: 21008
458
{30,89,19,95,69,59,50}
Returns: 68152
470
{41,90,45,65,74,9,90,32}
Returns: 54158
420
{43,1,6,40,75,17,57,4,54,91,20,75,50,24,27}
Returns: 6864
2
{99,93,67,3,95,24,13,52,37,32,51,3,42,68,9,81,31,13,69,68,55,52,97,84,42,77,89,24,83,61,9,3,60,97,91,53,88,64,79,10,50,71,39,21,31}
Returns: 6
423
{73,65,9,65,45,82,8,8,1,30,83,67,76,86,70,37,92,1,16,45,3,75,49,61,79,39,10,22,48,33,99,75,5,42,100,48,70,83}
Returns: 3299
122
{56,100,41,74,45,16,50,89,89,16,53,82,37,45,48,46,3,94,33,15,94,47,80,62,15,82,89,97,15,47,31,39,54,14,80,34,9,91,37,84,12,87}
Returns: 3017
309
{43,80,72,56,14,18,49,15,33,100,60,44,57,21,5,49,20,56,55,75,56,18,23,90,42,90,16}
Returns: 12066
279
{4,6,23,13,34,10,55,63,63}
Returns: 8337
177
{47,94,76,33,12,43,39,63,60,64,88,56,67,2,22,15,29,25,14,74,52}
Returns: 5452
14
{16,74,22,96,52,87,29,9,3,50,56,79,51,7,84,11,92,49,18,38,27,58,44,93,68,86,76}
Returns: 184
137
{61,4,84,31,59,59,12,91,78,1,14,77,31,46,65,55,28,92,1,43,37,33,58,3,44,35,77,70}
Returns: 850
202
{33,33,83,19,93,41,36,63,82,59,80}
Returns: 20147
500
{40,9}
Returns: 93856
469
{84,9,99,86}
Returns: 104451
270
{59,43,9,60,46,9,28,98,98,1,66,30,81,36,37,41,45,40,17,25,70,52,76,46,54,83,44,43,22}
Returns: 6306
225
{20,7,1,9,99,35,90,11,4,89,80,3,33,94,13,40,13,85,68,32,61,44,81,32,36,56,31,15,70,55,78,5,32,57,53,6,5,73,78,38,84,64,23,15,14,13,20,25,34,95}
Returns: 2242
159
{91,48,63,77,12,55,22,58,54,12,46,7,3,85,30,49,74,80,27,63,70,31,57,11,11,44,50,57,46,51,48,44,40,40,65,2,42,41,41}
Returns: 2432
279
{51,56,31,66,3,40,21,21,92,21,51,34,31,58,6,17,2,86,59,34,97}
Returns: 4749
417
{52,66,52,92,30,35,19,47,40,86,60,98,57,51,71,51,83,93,70,100,48,98,79,29,76,91,9,81,18,73,25,85,87}
Returns: 26587
385
{23,19,58,64,9,34,39,3,47,80,73,56,6,85,19,12,98,87,37,50,8,19,28,94,24,54,55,12,64,96,36,2,22,19,96,97,38,65,56,88,15}
Returns: 6376
311
{6,27,1,50,83,20,33,85,50,18,68,11,45,86,1,16,59,29,81,45,33,81,12,3,81,95,29,56,51,89,21,60,74,97,59,55,41,67,100,77,28,3,25,53,58,51}
Returns: 2172
57
{66,52,62,15}
Returns: 7122
427
{58,12,59,88}
Returns: 80144
379
{71,64,75,21,73,52,53,38,5,37,30,28,80,71,29,55,30}
Returns: 23920
402
{73,75,39,21,15,2,45,91,5,26,57,65,18,81,10,72,25,37,7,1,90,16,87,65,33,12,86,7,92,71,6,64,67,96,78,15,37,67,51,75,12,29,4}
Returns: 4087
370
{71,95,14,52,21,17,95,53,93,20,35,84,21,56,90,5,33,52,19,57,61,59,40,65,71,9,100,8,43,2,46,27,7,53,67,30,72,17,29,37,69,69,26}
Returns: 7234
384
{13,42,35,59,44,54,90,37,88,13,40,41}
Returns: 30770
32
{49,73,43,67,90,38,20,1,63,83,21,70,52,68,34,91,33}
Returns: 871
406
{44,49,14,53,16,58,37,25,60,1}
Returns: 14772
128
{85,4,6,7,54,69,79,38,79,100,18,3,74,97,97,19,87,31,7,78,90,44,54,89,55,69,80}
Returns: 1982
90
{44,33,83,52,84,96,58,42,41,27,17,64,36,80,85,77}
Returns: 6659
500
{1,2,3,4,5,6,7,8,9,10}
Returns: 4732
2
{1,100}
Returns: 101
500
{100,100}
Returns: 448800
max return value
500
{1, 1, 3, 5, 8, 13, 21, 34, 55, 89}
Returns: 3993
500
{91, 91, 91, 91, 92, 93, 93, 93, 94, 94, 95}
Returns: 130321
500
{2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
Returns: 961
500
{99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100}
Returns: 95275
500
{100,100,100,100,100,100,100, 99,99,99,99,99,99,99, 98,98,98,98,98,98,98, 97,97,97,97,97,97,97, 96,96,96,96,96,96,96, 95,95,95,95,95,95,95, 94,94,94,94,94,94,94}
Returns: 91894
500
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 95, 98, 100 }
Returns: 9464
500
{10, 2, 3, 4, 5, 6, 7, 8, 9, 1 }
Returns: 4732
3
{1, 1, 100 }
Returns: 5
4
{1, 1, 100 }
Returns: 8
500
{11, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
Returns: 6801
500
{100, 99, 98, 97, 96, 1, 2, 3, 4, 5, 100, 99, 98, 97, 96, 1, 2, 3, 4, 5, 100, 99, 98, 97, 96, 1, 2, 3, 4, 5, 100, 99, 98, 97, 96, 1, 2, 3, 4, 5, 100, 99, 98, 97, 96, 1, 2, 3, 4, 5 }
Returns: 1855
5
{100, 100, 1, 1 }
Returns: 12
500
{1, 100 }
Returns: 101996