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

23 задача 241, не запускается

elzara: def f (st,en, energy, track): track += str(st) if st > en : return elif st == en: return 1 else: f(st + 1, en, energy + plus1[st], track) f(st + 2, en, energy + plus2[st], track) f(st * 2, en, energy + mnoz2[st], track) plus1=[3,3,3,1,3,2,3,2,1,4,5,4,5,2,3] plus2=[1,2,1,2,3,2,1,2,3,2,3,2,1,1,3] mnoz2=[1,4,2,2,2,1,2,3,2,3,4,3,4,3,2] res = [] f(1,16,0,'') print (min(res)) Здравствуйте, делали по аналогии с заданием 240. не запускается в итоге.

Ответов - 3

Ж: Вот ваш поправленный код: [pre2] plus1 = [3, 3, 3, 1, 3, 2, 3, 2, 1, 4, 5, 4, 5, 2, 3] + [0] * 100 plus2 = [1, 2, 1, 2, 3, 2, 1, 2, 3, 2, 3, 2, 1, 1, 3] + [0] * 100 mnoz2 = [1, 4, 2, 2, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2] + [0] * 100 def f(st, energy): if st < 16: return f(st + 1, energy + plus1[st]) + f(st + 2, energy + plus2[st]) + f(st * 2, energy + mnoz2[st]) return (st == 16)*[energy] print(min(f(1, 0))) [/pre2] Вот более компактный код: [pre2] plus1=[3,3,3,1,3,2,3,2,1,4,5,4,5,2,3]+[0]*100 plus2=[1,2,1,2,3,2,1,2,3,2,3,2,1,1,3]+[0]*100 mnoz2=[1,4,2,2,2,1,2,3,2,3,4,3,4,3,2]+[0]*100 f=lambda n,en: f(n+1,en+plus1[n])+f(n+2,en+plus2[n])+f(n*2,en+mnoz2[n]) if n<16 else (n==16)*[en] print(min(f(1,0))) [/pre2]

elzara: а умножаем на 100, это для чего? Что за значение там хранится?

Ж: Это я от лени)), чтобы не разбираться с выходом за пределы диапазона. вот без этого магического умножения (там же нумерация с 1): [pre2] plus1=[3,3,3,1,3,2,3,2,1,4,5,4,5,2,3] plus2=[1,2,1,2,3,2,1,2,3,2,3,2,1,1,3] mnoz2=[1,4,2,2,2,1,2,3,2,3,4,3,4,3,2] f=lambda n,en: f(n+1,en+plus1[n-1])+f(n+2,en+plus2[n-1])+f(n*2,en+mnoz2[n-1]) if n<16 else (n==16)*[en] print(min(f(1,0))) [/pre2]




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