Форум » Динамическое программирование » тип 23 задача 173, у меня 43416124, в ответе 43413100 » Ответить

тип 23 задача 173, у меня 43416124, в ответе 43413100

L4043: [pre2] 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)) [/pre2]

Ответов - 4

MrAndrewson: Вы не учитываете, что попав в 18 через команду умножить на 2, нельзя применять эту команду снова. Как вариант, решить так. Правда, работает медленно [pre2]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, '', [])) [/pre2]

L4043: спасибо!!

L4043: спасибо!!


s11kai: 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 Строки с надписью скрыто были созданы для уменьшения размера картинки, тем более, что там формулы аналогичные тем что сверху или снизу



полная версия страницы