μ€κ·κ° κ°μ§κ³ μλ λμ μ μ΄ Nμ’ λ₯μ΄κ³ , κ°κ°μ λμ μ λ§€μ° λ§μ΄ κ°μ§κ³ μλ€.
λμ μ μ μ ν μ¬μ©ν΄μ κ·Έ κ°μΉμ ν©μ Kλ‘ λ§λ€λ €κ³ νλ€. μ΄λ νμν λμ κ°μμ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
첫째 μ€μ Nκ³Ό Kκ° μ£Όμ΄μ§λ€. (1 β€ N β€ 10, 1 β€ K β€ 100,000,000)
λμ§Έ μ€λΆν° Nκ°μ μ€μ λμ μ κ°μΉ Aiκ° μ€λ¦μ°¨μμΌλ‘ μ£Όμ΄μ§λ€. (1 β€ AiΒ β€ 1,000,000, A1Β = 1, iΒ β₯ 2μΈ κ²½μ°μΒ Aiλ Ai-1μ λ°°μ)
첫째 μ€μ Kμμ λ§λλλ° νμν λμ κ°μμ μ΅μκ°μ μΆλ ₯νλ€.
λμ λ¬Έμ λΌκ³ ν΄μ μ¬λ¬ κ°κ²©μ ꡬ맀 κ°λ₯ν λͺ¨λ μ‘°ν©μ μ°Ύλ νλ‘κ·Έλ¨μ λ μ¬λ Έμ΅λλ€.
κ·Έ μκ³ λ¦¬μ¦μμλ λΉ λ₯΄κ² λͺ¨λ 0μΌλ‘ λ¨μ΄μ§λ μ‘°ν©μ μ°ΎκΈ° μν΄ λΉμΌ 물건μ μμ λκ³ μΌ λ¬Όκ±΄μ λλμ κ³μ°ν΄ κ³μ° νμλ₯Ό μ€μ΄μ§λ§, μ¬κΈ°μλ μ΅μ κ°μμ ννλ‘ 0μ λ§λ€λ©΄ λ©λλ€.
κ·Έλμ κ°μ₯ λΉμΌ ννλ₯Ό λ€μ λκ³ λλμ μΌλ‘ κ³μ°ν΄ 첫 μ¬λ‘κ° λμ€λ©΄ μΆλ ₯νκ³ νμΆνλ©΄ λλ€κ³ μκ°ν΄μ 그리λλ₯Ό λ³νν΄ λ³΄μμ΅λλ€.
import sys
values_length, target = map(int,input().split())
values = list(map(int,sys.stdin.readlines()))
last_node = values_length - 2
last_index = values_length - 1
node = -2
quantities=[0 for i in range(values_length)]
balances=[0 for i in range(values_length)]
is_overrun = False
while not (node == -1 and is_overrun == True):
# quantity[n]μ μμ΄ν
κ°μμ λ¨κ°μ κ³±λ§νΌ μμ°μμ λΉΌκ³ μμ‘μ μ μ₯ν©λλ€.(λ§μ§λ§ μμ΄ν
μ μΈ)
balances[-1] = target
for n in range(last_index):
balances[n] = balances[n - 1] - (quantities[n] * values[n])
# λ§μ§λ§ μμ΄ν
μ λͺ κ° μ΄ μ μλμ§ κ³μ°ν©λλ€.
quantities[-1] = balances[-2] // values[-1]
balances[-1] = balances[-2] - (quantities[-1] * values[-1])
if any([i < 0 for i in balances]):
is_overrun = True
quantities[node] = 0
node -= 1
else:
is_overrun = False
node = last_node
# IF Balance is $0, then save it to the case_exact
if (balances[last_index] == 0):
print(sum(quantities))
break
# PREPAIR NEXT CASE
quantities[node] += 1
λ©λλ€.
κ·Έλ°λ° λ°±μ€μμλ

μκ° μ΄κ³Όκ° λΉλλ€. λΆνμν 리μ€νΈκ° λ무 λ§μ΅λλ€.
κ·Έλμ κ·Έλ₯ μ½λ μ¬νμ© μμ΄ νκΈ°λ‘ νμ΅λλ€.
μ΄μ°¨νΌ λλμ΄ λ¨μ΄μ§λ€λ νμ μ΄ μκΈ° λλ¬Έμ