Этот вопрос имеет аналогичную настройку для поиска массива, который соответствует набору сумм, хотя цели его совершенно различны.
Рассмотрим массив Aдлины n. Массив содержит только натуральные числа. Например A = (1,1,2,2). Определим f(A)как множество сумм всех непустых непрерывных подмассивов A. В этом случае f(A) = {1,2,3,4,5,6}. Шаги для производства f(A) следующие:
Подмассивы Aесть (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2). Их соответствующие суммы 1,1,2,2,2,3,4,4,5,6. Таким образом, набор, который вы получаете из этого списка {1,2,3,4,5,6}.
Мы называем массив A уникальным, если нет другого массива Bтакой же длины f(A) = f(B), кроме массива в Aобратном порядке. Как пример, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}но нет другого массива длины, 3который производит тот же набор сумм.
Мы будем рассматривать только массивы, в которых элементы являются заданным целым числом sили s+1. Например, если s=1массивы будут содержать только 1и 2.
задача
Задача для заданного nи sсостоит в том, чтобы подсчитать количество уникальных массивов этой длины. Вы можете предположить, что sмежду 1и 9.
Вы не должны считать обратный массив, а также сам массив.
Примеры
s = 1ответ всегда n+1.
s = 2, ответы считая от n = 1:
2,3,6,10,20,32,52,86
s = 8, ответы считая от n = 1:
2,3,6,10,20,36,68,130
Гол
Для данного n, ваш код должен выводить ответ для всех значений sот 1до 9. Ваша оценка - это наибольшее значение, nдля которого это завершается за одну минуту.
тестирование
Мне нужно будет запустить ваш код на моей машине с Ubuntu, поэтому, пожалуйста, включите как можно более подробные инструкции по компиляции и запуску вашего кода.
Leaderboard
- Андерс Касеорг в Русте n = 24 (34 секунды)
- n = 16 от Ourous in Clean (36 секунд)
- n = 14 от JRowan в Common Lisp (49 секунд)