Problem:


Problem A: Rental DVD Shop NEO

Problem

僕はレンタルDVDショップ、「NEO」でアルバイトを始めた。まずはこの店の料金システムを勉強することになった。

レンタルDVDは旧作、準新作、新作の3種類存在し、1本のレンタル料金がそれぞれ a 円、 b 円、 c 円である。
会計の際に以下に示すセットレンタルを複数回適用することができる。

まだセットレンタルを適用していないDVDを数本選ぶ。

選んだDVDの本数が d 本以上の場合、選んだDVDの合計金額が、 (選んだDVDの本数) * e 円を超える場合は、それらを (選んだDVDの本数) * e 円でレンタル出来る。

選んだDVDの本数が d 本未満の場合、選んだDVDの合計金額が d * e 円を超える場合は、それらを d * e 円でレンタル出来る。

上記に当てはまらない場合、選んだDVDは通常料金でレンタルとなる。

ここで僕はある問題に気づいた。セットレンタルはレジに通した時に自動的に適用されるのではなく、手動で適用しているのだ。これでは最適ではない（もっと安くなる余地がある）セットレンタルの適用をしてしまう可能性がある。これではクレームが発生しかねない。僕はクレーム対応が嫌いなので、セットレンタルを最適に適用した時の料金を計算するプログラムを作成することにした。

Input

入力は複数のデータセットからなる。
各データセットは以下で表される。
1行目は5つの整数 a , b , c , d , e がスペース区切りで与えられる。
2行目にはレンタル本数が与えられる。3つの整数 na , nb , nc がスペース区切りで与えられる。それぞれ旧作、準新作、新作のDVDの本数を表す。
入力の終わりは5つのゼロからなる。

a b c d e
na nb nc

Constraints

入力は以下の条件を満たす。

入力に含まれる値はすべて整数

0 < a < b < e < c ≤ 1000

0 < d ≤ 100000

0 ≤ na , nb , nc ≤ 100000

0 < na + nb + nc 

データセットの数は100個以下

Output

各データセットにつき、セットレンタルを最適に適用した時の料金を1行に出力せよ。

Sample Input

70 100 340 4 200
1 1 4
70 100 340 4 200
0 1 3
70 100 340 4 200
1 1 2
0 0 0 0 0

Sample Output

970
800
800



Sample input:
70 100 340 4 200
1 1 4
70 100 340 4 200
0 1 3
70 100 340 4 200
1 1 2
0 0 0 0 0


Sample output:
970
800
800

Submission status: Wrong Answer

Solution code:
# Edit: 2014/10/13
# Lang: Python3
# Time: 00.xxs

# File: pc1509.py

if __name__ == "__main__":
    while True:
        a, b, c, d, e = list(map(int, input().strip("\n").split(" ")))

        if a == 0 and b == 0 and c == 0 and d == 0 and e == 0:
            exit()

        na, nb, nc = list(map(int, input().strip("\n").split(" ")))

        #print("--------------------")
        #print("abcde:", a, b, c, d, e)
        #print("na,nb,nc:", na, nb, nc, d)

        if na + nb + nc < d or nc == 0:
            price = na * a + nb * b + nc * c
            print(price)
            continue

        if nc >= d:
            price = na * a + nb * b + nc * e
            print(price)
            continue

        if True:  # 0 < nc < d
            price0 = na * a + nb * b + nc * c  # wo set-wari
            if nb - (d - nc) >= 0:
                na = na
                nb -= (d - nc)
                nc = 0
            else:
                na -= (d - nc - nb)
                nb = 0
                nc = 0
            price1 = na * a + nb * b + nc * c + d * e
            #print("abcde:", a, b, c, d, e)
            #print("na,nb,nc:", na, nb, nc, d)
            print(min(price0, price1))
            #print("wo", price0)
            #print("w ", price1)
            continue

Submission status: Wrong Answer

Solution code:
# Edit: 2014/10/13
# Lang: Python3
# Time: 00.xxs

# File: pc1509.py

if __name__ == "__main__":
    while True:
        a, b, c, d, e = list(map(int, input().strip("\n").split(" ")))

        if a == 0 :
            exit()

        na, nb, nc = list(map(int, input().strip("\n").split(" ")))

        print("--------------------")
        print("abcde:", a, b, c, d, e)
        print("na,nb,nc:", na, nb, nc, d)

        p0 = na * a + nb * b + nc * c  # wo set-wari

        if nc - d >= 0:
            # na1 = na
            # nb1 = nb
            p1 = na * a + nb * b + nc * e
        else:  # nc - d < 0
            d1 = d - nc  # d1 > 0
            if nb - d1 >= 0:
                p1 = na * a + (nb - d1) * b + d * e
            else:  # nb - d1 < 0
                d2 = d1 - nb  # > 0
                if na - d2 >= 0:
                    p1 = na * (na - d2) + d * e
                else:
                    p1 = p0

        print("p0", p0)
        print("p1", p1)


        """
        nc1 = max(0, nc - d)
        if nc1 >= 0:  # 1
            nb1 = nb
            na1 = na
            p = na1 * a + nb1 * b + nc * e
        else:  # 2 nc1 == 0
            d1 = d - nc
            nb1 = max(0, nb - d1)
            if nb1 >= 0:  #2.1
                na1 = na
                p = na1 * a + nb1 * b + d * e
            else:  #2.2 nb1 == 0
                d2 = d1 - nb
                na1 = max(0, na - d2)
                if na1 >= 0:  # 2.2.1
                    p = na1 * a + d * e
                    #else
                    #    p = na * a + nb * b + nc * c

        print(p, p0)
        """

Submission status: Wrong Answer

Solution code:
if __name__ == "__main__":
    while True:
        a, b, c, d, e = list(map(int, input().strip("\n").split(" ")))

        if a == 0 :
            exit()

        na, nb, nc = list(map(int, input().strip("\n").split(" ")))

        #print("--------------------")
        #print("abcde:", a, b, c, d, e)
        #print("na,nb,nc:", na, nb, nc, d)

        p0 = na * a + nb * b + nc * c  # wo set-wari

        if nc - d >= 0:
            # na1 = na
            # nb1 = nb
            p1 = na * a + nb * b + nc * e
        else:  # nc - d < 0
            d1 = d - nc  # d1 > 0
            if nb - d1 >= 0:
                p1 = na * a + (nb - d1) * b + d * e
            else:  # nb - d1 < 0
                d2 = d1 - nb  # > 0
                if na - d2 >= 0:
                    p1 = na * (na - d2) + d * e
                else:
                    p1 = p0

        #print("p0", p0)
        #print("p1", p1)
        print(min(p0,p1))

Submission status: Wrong Answer

Solution code:
if __name__ == "__main__":
    while True:
        a, b, c, d, e = list(map(int, input().strip("\n").split(" ")))

        if a == 0:
            exit()

        na, nb, nc = list(map(int, input().strip("\n").split(" ")))

        # print("--------------------")
        # print("abcde:", a, b, c, d, e)
        #print("na,nb,nc:", na, nb, nc, d)

        p0 = na * a + nb * b + nc * c  # wo set-wari

        if na + nb + nc < d:
            p1 = p0
        elif nc - d >= 0:
            # na1 = na
            # nb1 = nb
            p1 = na * a + nb * b + nc * e
        else:  # nc - d < 0
            d1 = d - nc  # d1 > 0
            if nb - d1 >= 0:
                p1 = na * a + (nb - d1) * b + d * e
            else:  # nb - d1 < 0
                d2 = d1 - nb  # > 0
                if na - d2 >= 0:
                    p1 = (na-d2) * a + d * e
                else:
                    p1 = p0

        #print("p0", p0)
        #print("p1", p1)
        print(min(p0, p1))

Submission status: Wrong Answer

Solution code:
# Edit: 2014/10/13
# Lang: Python3
# Time: 00.xxs

# File: pc1509.py

if __name__ == "__main__":
    while True:
        a, b, c, d, e = list(map(int, input().strip("\n").split(" ")))

        if a == 0:
            exit()

        na, nb, nc = list(map(int, input().strip("\n").split(" ")))
        nd = d

        # print("--------------------")
        # print("abcde:", a, b, c, d, e)
        # print("na,nb,nc:", na, nb, nc, d)

        p0 = na * a + nb * b + nc * c

        if na + nb + nc < nd:
            p1 = p0
            # print(p0)
        else:
            if nc >= nd:
                p1 = na * a + nb * b + nc * e
            else:
                nd1 = d - nc
                if nb >= nd1:
                    p1 = na * a + (nb - nd1) * b + nd * e
                else:
                    nd2 = nd1 - nb
                    if na >= nd2:
                        p1 = (na - nd2) * a + nd * e
                    else:
                        print("error!!")

        # print("p0 :", p0)
        # print("p1 :", p1)
        #print("ans:",min(p0,p1))
        print(min(p0, p1))

Submission status: Wrong Answer

Solution code:
while(1):
    [a,b,c,d,e]=[int(x) for x in raw_input().split()]
    if a==0:
        break
    else:
        [na,nb,nc]=[int(x) for x in raw_input().split()]
        if nc>=d:
            price=nc*e+nb*b+na*a
        else:
            if nb>=d-nc:
                price=min(d*e+(nb+nc-d)*nb+na*a,nc*c+nb*b+na*a)
            elif na>=d-nc-nb:
                price=min(d*e+(na+nb+nc-d)*na,nc*c+nb*b+na*a)
            else:
                price=nc*c+nb*b+na*a
        print price

Submission status: Wrong Answer

Solution code:
while(1):
    [a,b,c,d,e]=[int(x) for x in raw_input().split()]
    if a==0:
        break
    else:
        [na,nb,nc]=[int(x) for x in raw_input().split()]
        if nc>=d:
            price=nc*e+nb*b+na*a
        else:
            if nb>=d-nc:
                price=min(d*e+(nb+nc-d)*b+na*a,nc*c+nb*b+na*a)
            elif na>=d-nc-nb:
                price=min(d*e+(na+nb+nc-d)*a,nc*c+nb*b+na*a)
            else:
                price=nc*c+nb*b+na*a
        print price

Submission status: Time Limit Exceeded

Solution code:
while True:
	a,b,c,d,e = map(int,raw_input().split())
	if a==0:
		break
	na,nb,nc = map(int,raw_input().split())
	v=[0]*(na+nb+nc)
	for i in range(na):
		v[i]=a
	for i in range(nb):
		v[i+na]=b
	for i in range(nc):
		v[i+na+nb]=c
	t=na+nb+nc
	ans=na*a+nb*b+nc*c
	if t < d:
		if ans > d*e:
			ans=d*e
	else:
		tmp = 0
		for i in range(d):
			tmp += v[len(v)-1-i]
		if tmp >= d*e:
			for i in range(len(v)):
				if e < v[i]:
					v[i] = e
			for i in range(d):
				v[len(v)-1-i] = e
		ans=0
		for i in range(len(v)):
			ans += v[i]

	print ans

Submission status: Accepted

Solution code:
# AOJ 1509 Rental DVD Shop NEO
# Python3 2018.7.13 bal4u

while True:
	a, b, c, d, e = map(int, input().split())
	if a == 0: break
	na, nb, nc = map(int, input().split())
	if nc >= d: ans = e*nc + b*nb + a*na
	else:
		ans = c*nc + b*nb + a*na
		k = d-nc;
		if k <= nb: nb -= k; k = 0
		else: k -= nb; nb = 0
		if k <= na: na -= k
		else: na = 0
		ans = min(ans, e*d + b*nb + a*na)
	print(ans)

Submission status: Accepted

Solution code:
while(1):
    [a,b,c,d,e]=[int(x) for x in raw_input().split()]
    if a==0:
        break
    else:
        [na,nb,nc]=[int(x) for x in raw_input().split()]
        if nc>=d:
            price=nc*e+nb*b+na*a
        else:
            if nb>=d-nc:
                price=min(d*e+(nb+nc-d)*b+na*a,nc*c+nb*b+na*a)
            elif na>=d-nc-nb:
                price=min(d*e+(na+nb+nc-d)*a,nc*c+nb*b+na*a)
            else:
                price=min(d*e,nc*c+nb*b+na*a)
        print price

Submission status: Accepted

Solution code:
while True:
	a,b,c,d,e = map(int,raw_input().split())
	if a==0:
		break
	na,nb,nc = map(int,raw_input().split())
	t=na+nb+nc
	ans=na*a+nb*b+nc*c
	if t < d:
		if ans > d*e:
			ans=d*e
	else:
		tmp = 0
		dd=d
		cnt=0
		if dd>=nc:
			cnt+=nc*c
			dd-=nc
		else:
			cnt+=dd*c
			dd=0

		if dd>=nb:
			cnt+=nb*b
			dd-=nb
		else:
			cnt+=dd*b
			dd=0

		if dd>=na:
			cnt+=na*a
			dd-=na
		else:
			cnt+=dd*a
			dd=0
		
		if cnt >= d*e:
			if e<a:
				a=e
			if e<b:
				b=e
			if e<c:
				c=e
			dd=d
			cnt=0
			# print "cnt"
			if dd>=nc:
				cnt+=nc*e
				dd-=nc
			else:
				cnt+=dd*e
				cnt+=(nc-dd)*min(e,c)
				dd=0
			# print cnt
			if dd>=nb:
				cnt+=nb*e
				dd-=nb
			else:
				cnt+=dd*e
				cnt+=(nb-dd)*min(e,b)
				dd=0
# 70 100 340 4 200
# 1 1 2
			# print cnt
			if dd>=na:
				cnt+=na*e
				dd-=na
			else:
				cnt+=dd*e
				cnt+=(na-dd)*min(e,a)
				dd=0
			ans=cnt

	print ans

Submission status: Accepted

Solution code:
while 1:
	a,b,c,d,e = map(int,raw_input().split())
	if a == 0: break
	na,nb,nc = map(int,raw_input().split())
	ans = a*na + b*nb + c*nc
	if nc >= d:
		ans = a*na + b*nb +e*nc
	else:
		nd = d; d -= nc
		t = nb if nb < d else d
		nb -= t; d -= t
		t = na if na < d else d
		na -= t; d -= t
		ans = min(ans,a*na + b*nb + e*nd)
	print ans

Submission status: Accepted

Solution code:
while 1:
	a,b,c,d,e = map(int,raw_input().split())
	if a == 0: break
	na,nb,nc = map(int,raw_input().split())
	ans = a*na + b*nb + c*nc
	if nc >= d:
		ans = a*na + b*nb +e*nc
	else:
		nd = d; d -= nc
		t = min(nb,d)
		nb -= t; d -= t
		t = min(na,d)
		na -= t; d -= t
		ans = min(ans,a*na + b*nb + e*nd)
	print ans

Submission status: Accepted

Solution code:
while 1:
    a, b, c, d, e = map(int, input().split())
    if a == b == c == d == e == 0:
        break
    na, nb, nc = map(int, input().split())
    if nc >= d:
        print(e * nc + b * nb + a * na)
        continue
    lst = [c] * nc + [b] * nb + [a] * na
    if na + nb + nc > d:
        print(min(sum(lst[:d]), e*d) + sum(lst[d:]))
    else:
        print(min(sum(lst), e*d))