문제 : https://www.acmicpc.net/problem/18185
이게왜 다이아5..? 아는사람은 안다는 점수꿀빨기 문제이다.
기본적으로 3개구매 -> 2개구매 -> 1개구매가 가장 최소의 비용이 들지만
1 4 2 3 1 같은경우
1) idx=0에서 3개구매 -> 0 3 1 3 1 , 7원
2) idx=1에서 3개구매 -> 0 2 0 2 1 , 14원
3) idx=1에서 1개x2구매 -> 0 0 0 2 1 , 20원
4) idx=4에서 2개구매 -> 0 0 0 1 0 , 25원
5) dix=4에서 1개구매 -> 0 0 0 0 0 , 28원
1) idx=0에서 2개구매 -> 0 3 2 3 1 , 5원
2) idx=1에서 3개구매 -> 0 1 0 1 1 , 19원
3) idx=1에서 1개구매 -> 0 0 0 1 1 , 22원
4) idx=4에서 2개구매 -> 0 0 0 0 0 , 27원
위처럼 두번째지점의 갯수가 세번째지점보다 클때, 3개구매를 진행할 경우, 중간값이 혼자 동떨어져 남는 경우로 인해, 더 큰 구매비용이 발생할 수 있다. 그러므로 두번째지점이 세번째지점보다 큰 경우 2개구매 -> 3개구매 -> 1개구매를 진행해주어야함!
N=int(input())
res=0
def buythree(idx):
global res
k=min(li[idx:idx+3])
for i in range(idx,idx+3):
li[i]-=k
res+=7*k
def buytwo(idx,type=0):
global res
if type==1:
k=min(li[idx],li[idx+1]-li[idx+2])
else:
k=min(li[idx:idx+2])
for i in range(idx,idx+2):
li[i]-=k
res+=5*k
def buyone(idx):
global res
k=li[idx]
li[idx]-=k
res+=3*k
li=[0]+list(map(int,input().split()))+[0,0]
for i in range(1,N+1):
if li[i]!=0:
if li[i+1]>li[i+2]:
buytwo(i,1)
buythree(i)
else:
buythree(i)
buytwo(i)
buyone(i)
print(res)