У цьому виклику вам передаються дві речі:
- Довжина струни,
N
- Список рядків,
L
кожному з яких присвоєно бальне значення. Будь-який рядок, який не передається, має значення 0
Потрібно побудувати рядок довжиною N
таким чином, щоб сума всіх точок підрядків була якомога більшою.
Наприклад:
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)]
повинен вивести
ABCDG
Оскільки дві підрядки з точками ( ABC
і CDG
) мають загальну кількість 5 балів, і жодна інша можлива побудова не може дати 5 і більше балів.
Підрядки можна використовувати кілька разів у рядку і можуть перетинатися. Можна припустити, що точки завжди будуть позитивними, довжина підрядок буде від 1 до N
довгих символів, і це N > 0
. Якщо декілька конструкцій максимально, надрукуйте будь-яку з них.
Ваша програма повинна працювати протягом розумного часу (не більше хвилини для кожного з прикладів):
1 [("A", 7), ("B", 4), ("C", 100)] => C
2 [("A", 2), ("B", 3), ("AB", 2)] => AB
2 [("A", 1), ("B", 2), ("CD", 3)] => BB
2 [("AD", 1), ("B", 2), ("ZB", 3)] => ZB
3 [("AB", 2), ("BC", 1), ("CA", 3)] => CAB
3 [("ABC", 4), ("DEF", 4), ("E", 1)] => DEF
4 [("A", 1), ("BAB", 2), ("ABCD", 3)] => AAAA or ABAB or BABA or ABCD
5 [("A", 1), ("BAB", 2), ("ABCD", 3)] => BABCD or BABAB
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)] => ABCDG
5 [("AB", 10), ("BC", 2), ("CA", 2)] => ABCAB
6 [("AB", 10), ("BC", 2), ("CA", 2)] => ABABAB
8 [("AA", 3), ("BA", 5)] => BAAAAAAA
10 [("ABCDE", 19), ("ACEBD", 18), ("ABEDC", 17), ("BCEDA", 16), ("EBDAC", 15), ("BACD", 14), ("CADB", 13), ("ABDC", 12), ("CABD", 11), ("EBDC", 10), ("ACE", 9), ("CBA", 8), ("AEC", 7), ("BE", 6), ("AE", 5), ("DC", 4), ("BA", 3), ("A", 2), ("D", 1)]
=> ACEBDACEBD
Це кодовий гольф , тому підготуйте найкоротшу відповідь улюбленою мовою!
DEF
кортежі пропущена кома