# Мінімальний час f[j] для i покупців вибирати як найменшу суму з таких: # f[j-3]+c[j-2] - j останній у трійці; # f[j-2]+b[j-1] - j останній у парі; # f[j-1]+a[j] - j одноосібник. puts("Вкажіть довжину черги: ") n = gets.to_i def mintime(n) # Функція із запам'ятовуванням усіх вхідних даних a=[] b=[] c=[] for j in 0..(n-1) x=gets.split( ) a.push(x[0].to_i) b.push(x[1].to_i) c.push(x[2].to_i) end f=[a[0]] f.push([b[0],f[0]+a[1]].min) f.push([c[0],f[0]+b[1],f[1]+a[2]].min) for j in 3..n-1 f.push([f[j-3]+c[j-2],f[j-2]+b[j-1],f[j-1]+a[j]].min) end return f[-1] end def min_time(n) # Функція без запам'ятовуванням усіх вхідних даних b1 = c1 = c2 = 1000000000 f1 = f2 = f3 = 0 for j in 0..(n-1) x=gets.split( ) # Ввести дані на j-го покупця a=x[0].to_i b=x[1].to_i c=x[2].to_i f = [f3+c2, f2+b1, f1+a].min f3,f2,f1,b1,c2,c1=f2,f1,f,b,c1,c # Підготуватися до наступного повторення end return f end print (min_time(n)) # Приклад вхідних даних # 6 # 1 2 3 # 1 2 3 # 2 3 1 # 1 1 1 # 2 3 2 # 2 2 2 # Приклад вихідних даних # 4