Форум » Динамическое программирование » Не сходится ответ в задании №23 в задаче (№311) » Ответить

Не сходится ответ в задании №23 в задаче (№311)

Дени Цицкиев: В представленном на сайте решении в одном из вызовов функции в качестве аргумента используется start+2, хотя судя по условию должно быть start*2. Также в "главном" вызове функции end = 64, хотя судя по условию должно быть 62. Мой вариант решения с внесёнными изменениями: from functools import cache @cache def f( start, end, lastCmd = 0, hit32 = False ): if start > end+1 or start in [10, 20, 30, 40, 50,60]: return 0 if start == end: return hit32 if start == 32: hit32 = True total = 0 if lastCmd == 1 else \ f( start-1, end, 1, hit32 ) return total + \ f( start*2, end, 2, hit32 ) + \ f( start*3, end, 3, hit32 ) count = f(5, 62) print( count ) Таким образом, мой ответ: 1, а не 34700224. Он легко приводится ((5-1)*2*2*2 - 1) * 2. Ни одного из остальных 34700223 решений я найти не могу. Возможно, я что-то не так понял. Спасибо!

Ответов - 7

Саша Кашев: Дени Цицкиев, ваше решение выглядит странно, не понимаю.

Дени Цицкиев: Саша Кашев, решение взято из ответов на задание, я только числа поменял.

Саша Кашев: Простите, разобрался


Саша Кашев: Интересная ситуация, хотел бы тоже посмотреть правильное решение. Ждем ответа

Алексей Папкин: О, интересная ситуация

Ж: Согласна с ответом 1 [pre2] f= lambda n,s,t: f(n-1,s+'-',t+[n]) + f(n*2,s+'*',t+[n]) + f(n*3,s+'*',t+[n]) \ if n!=62 and n<62+2 and '--' not in s and n%10!=0 \ else n==62 and '--' not in s and 32 in t print(f(5,'',[])) [/pre2]

elzara: def f(a, b, p): if a>b or a in[10,20,30,40,50,60]: return 0 if a==b: return 1 if a<b or p=='-1': return f(a+2,b, '+2')+f(a*3,b, '*3') if a<b or p!='-1': return f(a-1,b, '-1')+f(a+2,b, '+2')+f(a*3,b, '*3') print(f(5,32, '')*f(32,62, ''))



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