Автор | Сообщение |
|
Отправлено: 08.12.22 13:14. Заголовок: тип 23 задача 173, у меня 43416124, в ответе 43413100
from functools import lru_cache @lru_cache def f(start, x,n): if start > x: return 0 if start == x: return 1 if start == 33: return 0 k = f(start + 1, x,1) + f(start + 3, x,2) if n != 3: k += f(start*2,x,3) return k print(f(2,18,0)*f(18,51,0))
|
|
|
Ответов - 4
[только новые]
|
|
|
Отправлено: 12.12.22 09:07. Заголовок: Вы не учитываете, чт..
Вы не учитываете, что попав в 18 через команду умножить на 2, нельзя применять эту команду снова. Как вариант, решить так. Правда, работает медленно def f(st, fn, p, n): if st > fn or st == 33 or '33' in p: return 0 if st == fn and 18 in n: return 1 return f(st + 1, fn, p + '1', n + [st + 1]) + f(st + 3, fn, p + '2', n + [st + 3]) + f(st * 2, fn, p + '3', n + [st * 2]) print(f(2, 51, '', []))
|
|
|
|
Отправлено: 13.12.22 14:03. Заголовок: спасибо!!..
спасибо!!
|
|
|
|
Отправлено: 13.12.22 14:07. Заголовок: спасибо!!..
спасибо!!
|
|
|
|
Отправлено: 17.12.22 02:48. Заголовок: L4043 пишет: def f(..
L4043 пишет: цитата: | def f(st, fn, p, n): if st > fn or st == 33 or '33' in p: return 0 if st == fn and 18 in n: return 1 return f(st + 1, fn, p + '1', n + [st + 1]) + f(st + 3, fn, p + '2', n + [st + 3]) + f(st * 2, fn, p + '3', n + [st * 2]) print(f(2, 51, '', [])) |
| Очень красивое решение, но для тех кто работал только в паскале оно непонятно от слова совсем. Для интересующихся могу предложить более наглядное решение в Excel Строки с надписью скрыто были созданы для уменьшения размера картинки, тем более, что там формулы аналогичные тем что сверху или снизу
|
|
|
|